8

在我网站上的页面之间切换时,我丢失了 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 来尝试发现问题。我发现很有趣。请求标头标记引用者在页面之间丢失。

以下是步骤:

  1. 转到 example.org。
  2. 登录到 example.org。
  3. 我被重定向到 userpage.aspx。推荐人是http://example.org。已设置 ASP.NET_SessionId。
  4. 我点击<a>(例如,http ://www.example.org/page2.aspx )。呈现页面后,ASP.NET_SessionId 将丢失。

丢失的 ASP.NET_SessionId 始终丢失是 Chrome/Firefox/Safari。这在 IE 中不会发生。

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

对这种行为有什么想法吗?

4

2 回答 2

6

将其添加到 <system.web> 元素下的 web.config

<httpCookies domain=".mysite.com" />

看看行为是否有任何变化。听起来好像子域失败了,尽管我认为 cookie 一开始就基于根域。这应该迫使它这样做。

于 2012-04-04T14:17:18.353 回答
3

在我的情况下,问题如下:

在我的本地 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-PolicyHTML 元标记也可以控制 cookie 的处理方式,也可以配置为不允许设置会话 ID cookie。

于 2017-12-12T15:54:12.357 回答