如何在HTTP和HTTPS之间共享ASP.NET会话

8

我读到一个页面如果在https连接下运行,则不能与另一个页面(或相同页面)在普通的http下共享InProc会话(基于cookies)。我的网站正在运行于Server 2003,IIS 6和.Net 2.0。

通过一些实验,发现即使在https连接下存储数据到session中的页面,后续在普通http连接下也可以访问该数据。

所以,这种情况是否可能存在,还是我需要检查SSL配置中是否有缺陷?

4个回答

15

引自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上访问。


关闭此功能会带来哪些安全隐患? - Paul d'Aoust

6

IIS设置 在IIS属性窗口下的ASP选项卡 -> 会话属性中,有一个“在安全连接上新建ID”的设置。

我解决了这个间歇性问题,通过将其设置为false。


这似乎在IIS7中已经消失了 - 或者我可能不清楚它在哪里可以找到。这是每个站点还是全局服务器? - Chris Moschini
1
@chris-moschini 在IIS 7中,在“ASP.NET”下有一个“Session State”图标,所以如果您正在寻找那里,您就在正确的地方 - 是的,您是正确的;该设置已经消失了。 - Paul d'Aoust

1
如果上述解决方法都无效,请尝试这个。经过几天的研究,我终于找到了这个解决方法。
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    ...
    ...
    CookieSecure = CookieSecureOption.Never
});

1

搜索问题并没有找到太多相关讨论,仍在继续寻找。

编辑:好的,现在找到了一些资料。

看起来如果两组页面都在同一个应用程序/网站中,它们将可以正常工作。

所以我会继续前进,感到放心。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接