【发布时间】:2010-10-08 17:27:16
【问题描述】:
我读到在 https 连接下运行的页面无法与在常规 http 下运行的另一个页面(或相同的页面)共享 InProc 会话(基于 cookie)。我的网站在 Server 2003、IIS 6 和 .Net 2.0 上运行。
经过一些实验,似乎在通过 https 连接时在会话中存储数据的页面可以随后访问数据,即使在普通 http 下运行也是如此。
那么,是否有可能或者我应该去寻找 SSL 配置中的缺陷?
【问题讨论】:
我读到在 https 连接下运行的页面无法与在常规 http 下运行的另一个页面(或相同的页面)共享 InProc 会话(基于 cookie)。我的网站在 Server 2003、IIS 6 和 .Net 2.0 上运行。
经过一些实验,似乎在通过 https 连接时在会话中存储数据的页面可以随后访问数据,即使在普通 http 下运行也是如此。
那么,是否有可能或者我应该去寻找 SSL 配置中的缺陷?
【问题讨论】:
来自MSDN:
当用户来回移动时 在安全和公共区域之间, ASP.NET 生成的会话 cookie(或 如果您启用了无 cookie,则为 URL 会话状态)与他们一起移动 明文,但身份验证 cookie 永远不会被忽略 未加密的 HTTP 连接只要 因为设置了 Secure cookie 属性。
所以基本上,如果 Secure 属性设置为 false,则 cookie 可以通过 HTTP 和 HTTPS 传递。
我通过将其添加到我的Global.asax 文件中避免了这个问题:
void Session_Start(object sender, EventArgs e)
{
if (Request.IsSecureConnection) Response.Cookies["ASP.NET_SessionID"].Secure = false;
}
这意味着如果会话 cookie 是通过 HTTP 创建的,则只能通过 HTTPS 访问。
【讨论】:
IIS 设置 在 IIS 属性窗口中,在 ASP 选项卡 -> 会话属性下,有一个“安全连接上的新 ID”的设置
我通过将其设置为 false 为自己解决了这个间歇性问题。
【讨论】:
到目前为止,搜索问题并没有引起太多关于它的讨论,仍在寻找。
编辑:好的,现在找到一些东西。
是的,如果两组页面都在同一个应用程序/网站中,它似乎可以正常工作。
所以我会继续前进,感到放心。
【讨论】:
如果上述任何解决方案都不起作用,请尝试此操作。经过几天的研究,我已经破解了这个问题。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
...
...
CookieSecure = CookieSecureOption.Never
});
【讨论】: