【问题标题】:C# - WebForms - Can HttpContext.Current.SessionID be duplicated?C# - WebForms - 可以复制 HttpContext.Current.SessionID 吗?
【发布时间】:2011-10-15 17:10:22
【问题描述】:

当用户登录我的网站时,我会将 HttpContext.Current.SessionID 存储在我的用户日志表中。我想确保这可以重复吗?如果是,我想让该列在数据库中唯一。如果可以复制,那么从会话中获得的任何东西都是独一无二的,并且将来永远不会像 GUID 那样重新生成?

【问题讨论】:

    标签: c# asp.net session


    【解决方案1】:

    HttpContext.Current.SessionID 对于当前的会话集是唯一的 - 也就是说,每个会话 ID 在其处于活动状态时都是唯一的。但是,一旦会话过期,就无法保证新会话不会具有相同的 ID。如果是这种情况,任何持久性数据(基于会话 ID)现在都将引用不同的会话。

    还请注意MSDN page的以下备注。

    SessionID 值由 ASP.NET 随机生成并存储在一个 浏览器中的非过期会话 cookie。 SessionID 值为 然后在 cookie 中随每个请求发送到 ASP.NET 应用程序。

    但是,如果 cookie 被清除,会话将重新启动。

    SessionID 在服务器和浏览器之间以明文形式发送 cookie 或 URL 中的文本。结果,一个不需要的 源可以通过获取访问另一个用户的会话 SessionID 值并将其包含在对服务器的请求中。如果你 在会话状态中存储私人或敏感信息,它是 建议您使用 SSL 加密 包含 SessionID 的浏览器和服务器。

    【讨论】:

      【解决方案2】:

      为什么不将 userid 和 sessionid 设为复合主键?或者 sessionid 和 datetime。这将使其不可能或几乎不可能被复制。

      【讨论】:

        【解决方案3】:

        SessionID 不是唯一的。

        它在创建时是唯一的,但不能保证在一段时间内是唯一的。例如,如果重新启动 IIS,它可能会重新启动编号序列。

        在这种情况下,制作复合主键或使用 uniqueidentifier 就足够了。

        http://weblogs.asp.net/bsimser/archive/2004/09/13/228713.aspx

        【讨论】:

          猜你喜欢
          • 2020-02-26
          • 2019-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 2011-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多