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

会话cookie在Chrome和Firefox中运行良好,但在IE9和AJAX请求中,我会丢失所有会话cookie

直接请求查看

公共类地址控制器:控制器
{
[MVCSitemPaNode(Title=“Addresses”,ParentKey=“MyAccount”,Key=“Addresses”)]
公共行动结果索引()
{
....
var memberId=GetKeyValues.GetMemberId();//这非常好用。
...
}

Ajax调用

$.ajax({
url:“地址/CheckPrimaryAddressGood?t=”数学.random(),
类型:“获取”;,
成功:功能(数据){
...
公共类AddressController:控制器
{
公共行动结果检查PrimaryAddressGood()
{
...
var memberId=GetKeyValues.GetMemberId();
...
}
}
公共静态类GetKeyValues
{
公共静态字符串GetMemberId()
{
if(HttpContext.Current.Session[keyCookie]!=null)
{
memberId=GetMemberIdFromSession();
}
else if(HttpContext.Current.Request.Cookies[“token”!=null)
{
memberId=GetMemberIdFromCookie();
}
}
}

从AJAX调用中,我仅丢失了IE9中的Cookie值。我尝试了P3P覆盖,但仍然无法通过此post P3P链接工作

有人有过类似的问题吗?请让我知道如何解决这个问题。我已经花了一天的时间

编辑

我刚刚在Fiddler IE中跟踪到,IE并没有发送头数据,它只是发送“连接=保持活动状态”Pragma=无缓存“接受”*%2f*“接受编码”=gzip%2c+deflate+Accept-Language=en-US&Host=ebiz.company.com%3a28712“用户代理”=Mozilla%2f5.0+(兼容的%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\u SessionId%3d2a4tr1ymierclqsfxyfahqbc%3b+\uu session%3a0.56547616667181%3showwarning%3dtrue%3b+\uu session%3a0.5654767676667181%3aBaddresswarning%false%3b+>

为什么?

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

其他一些问题也有类似的问题,这些问题似乎并不完全是你的问题(特别是在你尝试P3P之后)。此外,互联网上也有很多帖子,都围绕着同样的几个问题

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

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

一些想法:

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

  • 我通常发布ajax而不是Get(只是有很多数据),然后
    让会话工作。这也避免了需要破坏缓存
    随机参数

  • 我使用的是很好的旧web表单,而不是mvc,并且发布到asmx.On
    asmx方法,我需要修饰服务器端方法

    //jquery.ajax()调用需要ScriptService和ScriptMethod。会话需要jquery.post()和WebMethod时不需要它们。
    [WebMethod(EnableSession=true)]
    [脚本方法]
    公共字符串DoSomething()。。。
    

发表评论