我如何在http和https之间共享一个asp.net会话

时间:2009-02-19 22:31:02

标签: asp.net ssl iis-6 https

我读到一个在https连接下运行的页面无法与常规http下运行的另一个页面(或相同的页面)共享InProc会话(基于cookie)。我的站点在Server 2003,IIS 6和.Net 2.0上运行。

经过一些实验后,似乎在通过https CAN连接时在会话中存储数据的页面随后即使在普通的http下运行也会访问数据。

那么,是否有可能或者我应该过去寻找SSL配置中的缺陷?

4 个答案:

答案 0 :(得分:15)

来自MSDN

  

当用户来回移动时   安全和公共区域之间,   ASP.NET生成的会话cookie(或   如果您启用了无cookie,则为URL   会话状态)与他们一起移动   明文,但身份验证   cookie永远不会过去   未加密的HTTP连接一样长   因为设置了安全cookie属性

基本上,如果Secure属性设置为false,则可以通过HTTP和HTTPS传递cookie。

我已将此问题添加到我的Global.asax文件中,从而避免了此问题:

void Session_Start(object sender, EventArgs e) 
{
    if (Request.IsSecureConnection) Response.Cookies["ASP.NET_SessionID"].Secure = false;
}

这意味着如果会话cookie是通过HTTP创建的,则只能通过HTTPS访问。

答案 1 :(得分:5)

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

的设置

我通过将此设置为false来修复此间歇性问题。

答案 2 :(得分:1)

到目前为止,搜索问题并没有引起太多关于它的讨论,仍在寻找。

编辑:现在好好找一些东西。

如果两组页面都在同一个应用程序/网站中,它似乎能正常工作。

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

答案 3 :(得分:1)

如果以上任何解决方案无效,请尝试此操作。经过几天的研究,我已经解决了这个问题。

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    ...
    ...
    CookieSecure = CookieSecureOption.Never
});