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

时间:2011-08-10 01:05:53

标签: c# asp.net session

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

3 个答案:

答案 0 :(得分:8)

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

请注意MSDN page的以下评论。

  

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

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

  

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

SessionID 唯一。

  

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

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

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