Подтвердить что ты не робот

Cookie не отправляется в iframe в IE9

Прежде всего, я провел некоторое исследование, прежде чем публиковать этот вопрос, поэтому я знаю о политике P3P и статья MSDN об этом. Насколько я понимаю, эта политика в основном (если не только) относится к IE6. Моя проблема связана с IE9. Кроме того, первое, что я сделал, это настроить политику (и она работает, поскольку она показывает сводку в отчете конфиденциальности IE).

Мой тестовый пример выглядит следующим образом: у меня есть страница, содержащая iframe. Документ iframe устанавливает cookie сеанса (полный HTTP-заголовок: Set-Cookie:sid=2b5540e0e4f27075ca4709851700137d; expires=Tue, 28-Jun-2011 07:27:41 GMT; path=/) для текущего домена на корневом пути, срок действия которого истекает через неделю. Там нет проблем, это уже некоторое время работает на производстве (автономно, а не в iframe).

Проблема заключается в следующем: в документе iframe есть некоторый javascript, который сначала обрабатывает некоторые HTTP-запросы (выполняется jQuery), затем перенаправляет пользователя (путем изменения свойства document.location). Запросы do отправляют файлы cookie, но перенаправление не.

Я захватил сетевые события в IE, и единственным отличием между двумя типами запросов, которые я могу найти, является инициатор: XHR выполняется библиотекой JS, а другой - кликом. Однако я действительно сомневаюсь, что клик не отправит файл cookie.

Я хочу знать, почему мои файлы cookie не отправлены, куки Google Analytics отправляются, поэтому это должно быть возможно.

UPDATE: Это определенно проблема зоны конфиденциальности: при снижении настроек конфиденциальности в IE для всех это работает. Невозможно выполнить другие настройки.

Я создал точный тестовый стенд: Это фактический iframe, который используется. Чтобы протестировать его, вы должны заполнить голландский почтовый индекс (извините;)), используемое местозаполнение в порядке: 1234 AB и 1. После отправки вы получите модальный код, когда это будет сделано, вы должны быть перенаправлены на страницу результатов. В IE перенаправление показывает точно ту же страницу, с которой вы начали (из-за того, что вы не устанавливаете файл cookie).

4b9b3361

Ответ 1

Вы пытались добавить заголовок P3P? Это не так сложно, как говорится в этой статье.

Например, в PHP просто добавьте этот заголовок в начало файла php:

<?php
    header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
?>

Эта точная проблема, но в другом контексте, работала здесь: Приложение Facebook работает во всех браузерах, но не в IE8

Ответ 2

Если кто-то пытается решить это для .NET-приложения

Добавьте заголовок P3P, о котором упоминал Карлос

HttpContext.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

Изменить: Еще лучше, если вы хотите поместить это в контроллер, просто добавьте следующий атрибут

public class IEP3PHeaderAttribute : FilterAttribute, IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // check if the user is using a IE based browser, add a p3p header if true and hasn't already been added
        if (HttpContext.Current.Request.Browser.Browser.ToUpper().Contains("IE"))
        {
            if (System.Web.HttpContext.Current.Response.Headers["p3p"] == null)
            {
                HttpContext.Current.Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");    
            }
        }
    }

    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
    }
}

а затем в вашем контроллере, например. HomeController

[IEP3PHeader]
public class HomeController
{
   public ActionResult DoSomething() {};
   public ActionResult DoSomethingElse() {};
} 

Ответ 3

Это о последовательности, в которой сгенерированы файлы cookie, т.е. существует ли файл cookie GA до того, как загружается iframe, но cookie сеанса установлен, когда он загружен?

Где код?

изменив свойство document.location

Вы назначаете значение непосредственно объекту местоположения или используете location.replace() или location.href=...?

Ответ 4

Является ли это правильным воспроизведением тестовой кровати? http://www.coderun.com/ide/?w=EyTizeGw9kKgHjwNp3xiPw

Я получаю файлы cookie в IE9, что мне не хватает?