Почему я теряю файлы 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+ ....
Почему?
Ответы
Ответ 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() ...
Ответ 2
Считаете ли вы, что используете sessionStorage? проверьте его для firefox
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
для всех других браузеров:
https://code.google.com/p/sessionstorage/