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