我读到一个页面如果在https连接下运行,则不能与另一个页面(或相同页面)在普通的http下共享InProc会话(基于cookies)。我的网站正在运行于Server 2003,IIS 6和.Net 2.0。
通过一些实验,发现即使在https连接下存储数据到session中的页面,后续在普通http连接下也可以访问该数据。
所以,这种情况是否可能存在,还是我需要检查SSL配置中是否有缺陷?
引自MSDN:
当用户在安全区域和公共区域之间切换时,ASP.NET 生成的会话 Cookie(如果启用了无 Cookie 会话状态,则为 URL)将以明文形式随他们移动,但只要设置了安全 cookie 属性,身份验证 cookie 就不会通过未加密的 HTTP 连接传递。
因此,如果将 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
});
搜索问题并没有找到太多相关讨论,仍在继续寻找。
编辑:好的,现在找到了一些资料。
看起来如果两组页面都在同一个应用程序/网站中,它们将可以正常工作。
所以我会继续前进,感到放心。