2010-11-30 54 views
3

如何在ASP.NET,VB.NET中解決這個會話問題?如何解決ASP.NET,VB.NET中的這個會話問題?

以下要求是否有:

當授權用戶登錄到該用戶不允許從另一臺計算機或在比其他用戶不同的瀏覽器登錄系統在這個時候使用的權利。

我們應用的補救措施是:我們將「Is_Loggedin」保留爲mst_vendor中數據類型爲「bit」的列作爲表名。當用戶登錄時,我們將標誌Is_Loggedin設置爲「1」,並且每當有人嘗試使用此帳戶登錄時,系統顯示錯誤「用戶已登錄」。

當用戶註銷時,只要用戶單擊註銷按鈕,就會在註銷過程調用時變爲「0」。

問題場景:

  1. 當用戶關閉所述標記保持相同的瀏覽器中,即, 「1」。

  2. 電源關閉時,它仍然與「1」相同。

  3. 如果會話在預定義值後超時,它將保持不變。

  4. 除此之外,可能會有不同的情況。

有什麼辦法讓我們可以使用應用程序對象存儲此用戶登錄狀態的內部標記嗎?

它可以提高系統的效率,也可以消除上述有問題的情況。

+1

如果你想要一個vb.net的答案,爲什麼`C#`和`C++`標籤? – 2010-11-30 12:12:49

回答

0

您可以保持脈衝進入腳本,當脈衝超時時,請考慮用戶完成該會話。

這樣做的好處是您可以分辨站點上閒置的用戶和離開站點的用戶之間的區別。

0

是的,一個腳本將是一個好主意。只需將會話超時設置爲5分鐘而不是20分鐘,然後在global.asax文件中將方法寫入session.end即可相應地更新數據庫。

+0

如果電源切斷髮生,這不會觸發 – 2010-11-30 11:45:51

+0

爲什麼不能?如果客戶端發生停電,會話將正常超時。 – StuperUser 2010-11-30 11:58:33

2

將日期時間存儲爲該位旁邊的另一列,並在每次用戶請求頁面時更新它。

當新用戶帶有相同的憑證並且該位爲「1」時,您可以檢查日期時間,並且如果剛纔您可以確定用戶不在那裏。所以讓登錄繼續。

0

從最高層看來,這裏是你能做什麼

  • 使用緩存與SlidingExpiration。

  • 每次用戶嘗試登錄時,請以他的用戶名作爲密鑰來檢查緩存。如果緩存中存在條目,則可以說該用戶已經登錄並拒絕登錄。

  • 如果未找到密鑰,請允許登錄並在緩存中創建一個新密鑰作爲用戶名並設置滑動到期時間。 (這應該被仔細選擇,因爲這將是持續時間,在瀏覽器關閉並且用戶嘗試重新登錄之後用戶不會被鎖定。)

  • 在Global的Application_PreRequestHandlerExecute處理程序中,檢查用戶當前是否處於活動狀態(您可以使用此會話),重置用戶的滑動到期時間。這樣,每個頁面請求緩存過期時間將被重置。

  • 如果用戶關閉瀏覽器並關閉,緩存將在設置的時間段後過期,並且將釋放用戶再次登錄。

  • 如果用戶在緩存過期之前嘗試再次登錄,用戶需要等待一段時間才能讓緩存過期。

  • 如果用戶註銷正常,您可以刪除註銷事件上的緩存條目,以便用戶不必等待重新登錄。

滑動過期超時可與會話超時同步以模擬應用程序的實際會話超時。

通過這種方法,您還可以節省大量數據庫往返時間來更新/檢查用戶狀態,而且無論託管環境或會話模式如何,這都可以工作。