【问题标题】:how can I share an asp.net session between http and https如何在 http 和 https 之间共享 asp.net 会话
【发布时间】:2010-10-08 17:27:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net ssl iis-6 https


    【解决方案1】:

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

    【讨论】:

    • 关闭此功能有什么安全隐患?
    【解决方案2】:

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

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

    【讨论】:

    • 这似乎在 IIS7 中消失了——或者我只是不清楚在哪里可以找到它。这是每个站点还是全局到服务器?
    • @chris-moschini 在 IIS 7 中,“ASP.NET”下有一个“会话状态”图标,所以如果您正在寻找,那么您来对地方了——是​​的,你是对的;该设置已消失。
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      如果上述任何解决方案都不起作用,请尝试此操作。经过几天的研究,我已经破解了这个问题。

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

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 2011-02-02
        相关资源
        最近更新 更多