Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?

Posted

技术标签:

【中文标题】Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?【英文标题】:Chrome and IE not sending ASP.NET_SessionID - i.e. session variable gets lost? 【发布时间】:2011-11-08 13:57:20 【问题描述】:

我有一个 ASP NET MVC 3 应用程序,其页面设置了一些参数(比如说region='North')。

当它被发送回服务器时,我将此参数设置为会话变量并返回三个图像,它们的src 属性设置为三个不同的controller/getImageXy url。

现在,这些控制器方法执行查询(基于会话变量)并返回图像。 它有点简洁,用户得到一个快速回复,然后这些图像被填充(异步)。

在 FF 中一切正常。初始回复有一个 ASP.NET_SessionID 集(cookie)。

FF,然后,使用相同的 cookie 获取三个图像,一切都很好。

但是,Chrome 和 IE 却没有。

他们只是发送__RequestVerificationToken_Lw__。 当然,我的会话变量 ("region") 会丢失。

谢谢,

伊戈尔

【问题讨论】:

您使用的是 IFrame 吗?我最近遇到了一个类似的问题,但它只在涉及 IFrame 时出现在 IE 和 Chrome 中。 不,它几乎是一个带有三个 img 标签的 body 标签。 【参考方案1】:

回答我自己的问题并可能节省几个小时:

问题是我在会话 id cookie 上设置了 domain 属性。

我为什么要这样做? 我从第 163 页的“Proffesional ASP NET MVC 3”一书中复制了它,打算设置 HttpOnly 标志。引用:

您可以通过添加 简单标志:HttpOnly。您可以像这样在 web.config 中进行设置:

<httpCookies domain=”String” httpOnlyCookies=”true” requireSSL=”false”/>

我因不假思索地复制粘贴而受到惩罚。 所以,当我把它改成domain="" 时,问题就解决了。

有趣的是,FF 忽略(或滥用)了这个属性,但这是另一个话题。

【讨论】:

以上是关于Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?的主要内容,如果未能解决你的问题,请参考以下文章

IE10 使用 CORS 时不发送 cookie

为啥 Chrome 和 IE 将“Mozilla 5.0”放在它们发送到服务器的 User-Agent 中? [复制]

跨域的 jQuery AJAX 对于 Chrome 等工作正常,但不能在 IE10 中发送数据,也不能在 IE <= 9 中发送请求

解决IE8IE9不支持发送CORS跨域请求

请帮帮忙,我这chrome的问题怎么解决

下拉图像在 Chrome 和 IE 中不可见