Cookie не отправляется в iframe в IE9 - PullRequest
26 голосов
/ 21 июня 2011

Прежде всего, я провел некоторое исследование, прежде чем опубликовать этот вопрос, поэтому я знаю о политике 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 отправляют куки, но перенаправление не .

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

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

ОБНОВЛЕНИЕ: Это определенно проблема зоны конфиденциальности: при снижении настройки панели конфиденциальности в IE для всех это работает.Все остальные настройки завершаются неудачей.

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

Ответы [ 4 ]

11 голосов
/ 30 июня 2011

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

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

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

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

4 голосов
/ 01 ноября 2013

Если кто-то пытается решить эту проблему для приложения .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() {};
} 
0 голосов
/ 29 июня 2011

Это правильное воспроизведение вашего тестового стенда? http://www.coderun.com/ide/?w=EyTizeGw9kKgHjwNp3xiPw

Я получаю куки в IE9, что мне не хватает?

0 голосов
/ 28 июня 2011

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

Где код?

путем изменения свойства document.location

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...