2013-09-05 57 views
0

我是ASP.Net的新手,我有一個基本問題。我試圖找到答案,但我失敗了。ASP.Net - 會話超時後過去會發生什麼

我使用會話變量來通過我的web應用中的頁面攜帶記錄的用戶ID。

if (Session["LoggedUserKey"] == null) 
{ 
    Session.Add("LoggedUserKey", UserID); 
} 
else 
{ 
    Session["LoggedUserKey"] = UserID; 
} 

我不確定會話超時到期後會發生什麼?我會失去我的用戶ID嗎?而將是會話超時擴展時,我會問像會話變量:您的會話已過期

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["LoggedUserKey"] == null) 
    { 
     Response.Redirect("~/Login.aspx"); 
     return; 
    } 
} 
+0

一旦會話過期,您將失去LoggedUserKey中的userid值。 – Arbaaz

回答

3

您正在檢查LoggedUserkey是否null或不..如果您要添加UserId,你可能必須從TextBox獲得LoggedUserkey。 其他部分的目的是什麼?當LoggedUserkey已經有UserId或者你爲什麼再次加入UserId?您已經在會話過期時失去了UserId

第二個代碼有意義.. 一旦您的會話過期。 (默認情況下20分鐘後) 在頁面加載如果Session["LoggedUserKey"] == null那麼您將用戶重定向到Login.aspx頁面。

另請注意,每次與服務器交互時都會重置超時會話。如刷新頁面或與服務器交互的任何活動。

1

當會話超時,你可以在web.config中同時能延長會話超時爲

<sessionState timeout="60"></sessionState> 

然後會話將在60分鐘內過期,您可以在此給出自定義時間。當會話過期時,您無法獲取用戶ID。例如會話超時只有幾分鐘的bannking站點。之後,這些你有,如果你不及時發送到服務器的任何請求開始一個新的會話少他們會話超時

+0

因此,當一些請求被髮送到服務器會話生存期重置爲定義值? –

+1

yes會話超時是根據發送給服務器的上一次請求計算得出的。 –

2

當會話到期或發生會話超時時,會引發global.asax中的Session_End事件(除非會話由數據庫處理),並且會話集合最終被清除。

如果任何對象不持有對會話集合中任何值的引用,則GC將收集它。然而,關於GC究竟何時移除這些物體的說法並不多。

此外,關於會話超時擴展或不是,timeout表示當前會話將被放棄之前必須經過的當前分鐘數,前提是不再收到客戶端請求。此值可以通過編程方式進行更改,讓您有機會在更重要的操作需要時使會話集合保持較長時間。

因此,結論是當用戶在超時期限之前執行某些活動時會話會延長。如果用戶在超時時段後進行了一些活動,則會話肯定會過期,用戶將被重定向到登錄頁面,或者根據您的設置發生適當的後續步驟。