3

我正在嘗試編寫一些代碼,以便在用戶放棄其會話時(通過超時或註銷)進行一些整理,但希望訪問User對象我知道會話屬於誰。在會話結束時訪問成員身份的用戶

不幸的是HttpContext爲空,所以我無法直接訪問HttpContext.User或HttpContext.User.IsInRole甚至auth cookie。我瞭解背後的原因,但不知道在會話超時時是否有其他方式可以訪問此信息?

這與複製會話中某些信息的明顯答案不同。

謝謝。

回答

3

您可以使用Global.asaxSession_End事件。會話過期時Session_End事件被自動調用。

問題是在沒有當前請求的情況下調用Session_End事件。結果,HttpContext.Current在Session_End內爲null。

如果您想獲取用戶信息,只要用戶成功登錄,您就需要將它們保存在Session中。

private void Session_End(object sender, EventArgs e) 
{ 
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode 
    // is set to InProc in the Web.config file. If session mode is set 
    // to StateServer or SQLServer, the event is not raised. 

    var userName = Session["UserName"]; 
    var sessionId = Session.SessionID; 
} 

enter image description here

+0

我想盡可能多的,有點惱人具有重疊,但不是世界我想結束。 – radm4

0

沒有什麼會將會員用戶與會話關聯起來。

當用戶手動註銷時,在清除其會話之前,您可以獲取其用戶信息。

但是,如果用戶離開瀏覽器並且服務器上的會話超時,您將不知道該用戶是誰,因此無法爲他們整理。

在服務器上,您可能需要跟蹤用戶上次進行交互的時間,然後運行作業以整理那些在一段時間內未進行交互並被視爲已註銷的用戶。

相關問題