您好我正在研究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();
等待你的帮助。提前致谢
答案 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。
答案 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
用户。