2013-11-27 58 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點擊註銷按鈕。