为什么我在 IE 9 中丢失 Ajax 请求的 cookie 和会话

问题描述 投票:0回答:2

会话 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 调用

   $.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 调用中,我仅在 IE9 中丢失了 cookie 值。我尝试了 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+ ....

为什么?

jquery ajax asp.net-mvc asp.net-mvc-4 cookies
2个回答
5
投票

这些只是一些想法,可能会有所帮助(并且您现在可能已经阅读或尝试过这些)。似乎没有灵丹妙药。

其他一些问题也有类似的问题,但似乎不完全是您的问题(特别是自从您尝试过 P3P 以来)。互联网上也有很多帖子,都是围绕同样的几个问题。

Internet Explorer 9 AJAX 请求上没有会话 Cookie

Cookie 被阻止/未保存在 Internet Explorer 中的 IFRAME 中

一些想法:

  • 一个答案在网址中存在下划线问题。你没有 那,但是你能尝试一个没有随机参数的干净的吗?只是 万一它不喜欢那样。
  • 很多关于这样做遇到困难的帖子 从 iframe 内。如果你没有 iframe,这不是 问题。
  • P3P,你说你试过了;我看到一条评论说标题 必须针对每个请求进行设置,而不仅仅是正在寻找的请求 会话/cookie。
  • 跨域/CORS问题?看起来不像 与您的根相对 url。
  • 在另一台计算机上尝试 IE9?愚蠢的, 但也许这是您浏览器上的一些模糊设置;区域等
  • fiddler 是否在您网站上浏览的常规页面上显示会话 ID? (只是为了确保它不是站点范围的,而只是这个 ajax 调用)。

  • 我通常发布ajax而不是Get(只是有很多数据),并且做 有会话工作。这也避免了需要缓存清除 随机参数。

  • 我正在使用良好的旧 Web 表单而不是 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?看看火狐浏览器

https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

对于所有其他浏览器:

https://code.google.com/p/sessionstorage/

© www.soinside.com 2019 - 2024. All rights reserved.