在我的网站上切换页面时,我丢失了ASP.NET_SessionId。问题发生在Chrome / Firefox / Safari中。它不会发生在IE中。这很奇怪......这是我的情景。
我可以通过在浏览器中输入www.example.org或example.org来访问我的网站(这是您将看到的重要信息)。
我输入example.org。从我的主页,我登录到我的网站(注意:我没有使用ASP.NET表单身份验证)。我被发送到我的默认用户页面(例如,userpage.aspx)。在此页面中,我点击<a>
,将我发送到我网站上的其他页面。 <a>
链接是完全限定的(例如http://www.example.org/page2.aspx)。当我被发送到新页面时,我的会话就丢失了!
所以,我跑Fiddler尝试发现问题。我发现的很有趣。请求标头标记 Referer 在页面之间丢失。
以下是步骤:
<a>
(例如http://www.example.org/page2.aspx)。呈现页面后,ASP.NET_SessionId将丢失。丢失的ASP.NET_SessionId一直丢失Chrome / Firefox / Safari。这不会发生在IE中。
如果使用www.example.org替换example.org重复上述步骤,则ASP.NET_SessionId不会丢失。它每次都能正常工作。
对此行为的任何想法?
答案 0 :(得分:6)
将此添加到&lt; system.web&gt;下的web.config中。元件
<httpCookies domain=".mysite.com" />
查看行为是否有任何变化。听起来好像子域失败了,尽管我认为cookie基于根域开始。这应该强制它。
答案 1 :(得分:1)
在我的情况下,问题如下:
在我的本地Visual Studio环境中,我的开发“web.config”文件意外地包含以下内容:
<configuration>
<system.web>
<httpCookies requireSSL="true" />
</system.web>
</configuration>
由于开发IIS Express在http://localhost:7561
(非HTTPS)运行,因此此检查触发不设置/接受任何cookie,包括会话ID cookie。
解决方案是简单地注释掉<httpCookies requireSSL="true" />
行。
我能想到的另一个类似问题是,Content-Security-Policy
HTML元标记(也是controls how cookies are handled)也可以配置为不允许设置会话ID cookie。