代码之家  ›  专栏  ›  技术社区  ›  Tim Mahy

在ASP.NET中检索SSL会话ID

  •  4
  • Tim Mahy  · 技术社区  · 14 年前

    有没有办法在ASP.NET中检索SSL会话ID服务器端?

    2 回复  |  直到 13 年前
        1
  •  3
  •   Warren Rumak    14 年前

    简短的回答是不。这是IIS的一个故意限制,以防止人们依赖不可靠的东西。

    在市场上,您将发现各种硬件负载均衡器,它们将提供基于SSL会话ID的服务器持久性等功能,但它们工作得不太好,因为SSL重新协商随时可能发生。例如,在Internet Explorer 8中,为协商新的SSL会话 每个标签 已打开到网站。您可以从其他多进程浏览器中看到类似的行为。因此,我必须强调的是,您不应该将SSL会话ID用于任何类型的用户标识目的。

    也就是说,如果您确实需要一些专门任务的SSL会话ID信息,我建议您使用Apache、mod_ssl和mod_代理作为您的IIS系统的前端。稍加修改,您就可以强制mod ssl给您提供会话ID,然后将其作为查询字符串参数添加到IIS服务器的代理请求中……或者可以将其存储在数据库中。

        2
  •  0
  •   thmshd    14 年前

    提姆,

    您是真的“只是”尝试检索会话ID字符串,还是在切换到SSL时可能丢失所有会话信息?这将是一个非常常见的问题,因为在使用“inproc”会话存储时,服务器端的会话会丢失,而在不存储在公共域中时,客户机上的会话cookie可能会丢失。

    因此,您应该在web.config文件中切换到状态服务器或SQL Server会话管理,例如:

    <sessionState mode="SQLServer"
       cookieless="true"
       regenerateExpiredSessionId="true"
       timeout="30"
       sqlConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
       stateNetworkTimeout="30" />
    

    除此之外,我真的不知道你为什么不能找回 HttpContext.Current.Session.SessionID 也在SSL模式下。

    一些msdn链接:

    也许这会有所帮助。

    最好的问候