重复的会话ID

时间:2013-11-27 08:36:53

标签: c# asp.net session

您好我正在研究Sessions,并且不知道会话ID的创建方式与前一个相同。

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

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

守则如下:

登录cs文件

HttpContext.Current.Session["user"]=user;
HttpContext.Current.Session["sessionid"]=HttpContext.Current.Session.SessionID;
用户退出时

注销cs文件

HttpContext.Current.Session.Abandon();

等待你的帮助。提前致谢

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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。

答案 2 :(得分:2)

您可以按照Subin的建议使用GUID。

在为用户创建会话时,请使用以下代码。

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

将其保存到DB时,请使用反向:

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

答案 3 :(得分:1)

由于用户是您网站上的成员,因此他们应该已经拥有uniqueID,无论这是email address还是Id?您可以使用它来输入Login table

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

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