缺少ASP.NET_SessionId

时间:2012-04-04 14:11:09

标签: asp.net iis-7

在我的网站上切换页面时,我丢失了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 在页面之间丢失。

以下是步骤:

  1. 转到example.org。
  2. 登录example.org。
  3. 我被重定向到userpage.aspx。 Referer是http://example.org。 ASP.NET_SessionId已设置。
  4. 我点击<a>(例如http://www.example.org/page2.aspx)。呈现页面后,ASP.NET_SessionId将丢失。
  5. 丢失的ASP.NET_SessionId一直丢失Chrome / Firefox / Safari。这不会发生在IE中。

    如果使用www.example.org替换example.org重复上述步骤,则ASP.NET_SessionId不会丢失。它每次都能正常工作。

    对此行为的任何想法?

2 个答案:

答案 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。