C#-WebForms-HttpContext.Current.SessionID是否可以复制?

C#-WebForms-HttpContext.Current.SessionID是否可以复制?,c#,asp.net,session,C#,Asp.net,Session,当任何用户登录到我的网站时,我都将HttpContext.Current.SessionID存储在我的用户日志表中。我想确定这是不是可以复制的?如果是,我想使该列在数据库中唯一。如果可以复制,那么从会话中获得的任何东西都将是唯一的,并且将来不会像GUID那样重新生成?为什么不将userid和sessionid作为复合主键?或者sessionid和datetime。这将使它不可能或几乎不可能被复制。SessionID是不唯一的 它在创建时是唯一的,但不能保证在一段时间内是唯一的。例如,如果重新启动

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

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

SessionID是不唯一的

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

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


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

还请注意以下的评论

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

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

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