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

Почему я теряю файлы cookie и сессию по запросам Ajax в IE 9

Файлы cookie сеансов отлично работают в Chrome и Firefox, но с запросами IE9 и AJAX я теряю все файлы сеансов cookie.

Прямой запрос на просмотр

  public class AddressController : Controller
  {
    [MvcSiteMapNode(Title = "Addresses", ParentKey = "MyAccount", Key = "Addresses")]
     public ActionResult Index()
     {
        ....
         var memberId = GetKeyValues.GetMemberId(); // This works perfect.
        ...
      }

Ajax call

   $.ajax({
        url: "/Address/CheckPrimaryAddressGood?t="+ Math.random(),
        type: "Get",
        success: function(data) {
         ...

public class AddressController : Controller
{
    public ActionResult CheckPrimaryAddressGood()
        {
           ...
           var memberId = GetKeyValues.GetMemberId();
           ...
       }
 }
 public static class GetKeyValues
 {
    public static string GetMemberId()
    {
         if (HttpContext.Current.Session[keyCookie] != null)
            {
                memberId = GetMemberIdFromSession();
            }
            else if (HttpContext.Current.Request.Cookies["token"] != null)
            {
                memberId = GetMemberIdFromCookie();
            }
    }
}

Из вызова AJAX я потерял значения cookie только IE9. Я попробовал P3P переопределить, все еще не работал с этого сообщения ссылка P3P

У кого-то была аналогичная проблема? Пожалуйста, дайте мне знать, как это решить. Я потратил уже один день на это.

Изменить

Я только что проследил в Fiddler IE не отправляет данные заголовка, он просто отправляет "Connection=Keep-Alive&Pragma=no-cache&Accept=*%2f*&Accept-Encoding=gzip%2c+deflate&Accept-Language=en-US&Host=ebiz.company.com%3a28712&User-Agent=Mozilla%2f5.0+(compatible%3b+MSIE+9.0%3b+Windows+NT+6.1%3b+WOW64%3b+Trident%2f5.0)&Origin=http%3a%2f%2febiz.spe.org%3a28712}

но Chrome: {Connection=keep-alive&Accept=*%2f*&Accept-Encoding=gzip%2c+deflate%2c+sdch&Accept-Language=en-US%2cen%3bq%3d0.8&Cookie=ASP.NET_SessionId%3d2a4tr1ymierclqsfxyfahqbc%3b+__session%3a0.5654769616667181%3ashowwarning%3dtrue%3b+__session%3a0.5654769616667181%3aBadAddressWarning%3dfalse%3b+ ....

Почему?

4b9b3361

Ответ 1

Это лишь некоторые идеи, которые могут помочь (и вы, вероятно, уже читали или пробовали их). Кажется, что нет серебряной пули.

У некоторых других вопросов были подобные проблемы, которые, похоже, не были вашими (особенно потому, что вы пытались P3P). Также много сообщений в целом в Интернете, все вокруг те же самые проблемы.

Нет файлов cookie сеанса в приложениях AJAX Internet Explorer 9

Cookie заблокирован/не сохранен в IFRAME в Internet Explorer

Некоторые идеи:

  • У одного ответа были проблемы с подчеркиванием в URL-адресе. У вас нет что, но можете ли вы попробовать чистый без случайного параметра? Просто в случае, если это не нравится.
  • Много сообщений о проблемах с этим изнутри iframe. Если у вас нет iframe, это не проблема.
  • P3P, вы сказали, что попробовали; Я видел один комментарий, что заголовок должен быть установлен по каждому запросу, а не только для тех, кто ищет сессия/печенье.
  • Проблема с несколькими доменами /CORS? Не похоже с вашим корневым URL-адресом.
  • Попробуйте IE9 на другом компьютере? Глупо, но, может быть, это несколько неясных настроек в вашем браузере; зон и т.д.
  • Отображает ли скрипач идентификатор сеанса на обычной странице, просматриваемой на вашем сайте? (просто чтобы убедиться, что он не на сайте, а просто на этот вызов ajax).

  • Обычно я отправляю ajax вместо Get (просто было много данных) и делаю имеют сеанс работы. Это также предотвратило необходимость перебора кеша случайный параметр.

  • Я использую старые старые веб-формы вместо mvc и отправляю в asmx. На метод asmx, мне нужно украсить серверный метод.

    // ScriptService and ScriptMethod are required for the jquery.ajax() call. They weren't required for jquery.post(). WebMethod needed for session.
    [WebMethod(EnableSession = true)]
    [ScriptMethod]
    public string DoSomething() ...