2013-11-27 59 views
2

嗨我正在处理会话,不知道乳清会话ID是否与上一个创建相同。重复会话ID

我有一个日志表,告诉哪个用户已经登录,它的时间和存储其唯一的会话ID。当它注销会话ID的系统检查时,会更改其状态以注销。

但是,当用户再次登录时,创建的会话ID是相同的,我不知道错误是什么。

守则在CS文件下

日志给出

HttpContext.Current.Session["user"]=user; 
HttpContext.Current.Session["sessionid"]=HttpContext.Current.Session.SessionID; 

当用户登录超时

注销CS文件

HttpContext.Current.Session.Abandon(); 

等待您的帮助。在此先感谢

+0

选择最佳答案,如果有任何答案对你有用 –

回答

4

您可以改用Guid.NewGuid().ToString()。 ASP.NET 不保证会话ID在会话的生命周期之外是唯一的。

虽然每个生成GUID不能保证是唯一的,唯一的密钥的总数>(2^128或3.4×10^38)是如此之大,以致产生两次相同数目的概率>是很小。例如,考虑可观测的宇宙,其中包含大约5×10^22个恒星;每颗恒星可以有6.8×10^15个通用独特的GUID s。

您始终可以相信GUID始终是唯一的。那就是GUID的真正目的。 This SO Question询问了唯一的ID。

+0

确定让我使用GUID谢谢你的信息:) –

+0

你永远是受欢迎的:-) –

5

ASP.NET并不保证会话ID是唯一超过该会话的生命周期(即没有生活会话具有相同的ID),我很害怕。如果您需要该功能,您应该只使用您自己的唯一标识符。

+0

好的。我得到了它非常感谢:) –

2

您可以使用Subin建议的GUID。

虽然为用户创建会话的时间,请使用下面的代码。

HttpContext.Current.Session["sessionid"]=Guid.NewGuid().ToString();

虽然它保存到数据库,使用反向:

User.dbField = HttpContext.Current.Session["sessionid"]

1

由于用户在自己的网站会员,他们应该已经有一个uniqueID,这是否是一个email addressId?您可以使用它来输入Login table

注意:这个过程有一个警告;它将工作正常,如果logout button上的用户clicks,则可以从Login Table中删除uniqueId或更新状态以注销,无论采用何种方式进行设置。但是,如果用户只关闭浏览器,则不会触发任何事件来执行相同的操作,因此用户将保持登录状态。

您还应该查看可能的解决方案,以处理尚未用户的clean up点击注销按钮。