2011-01-05 65 views
7

在我的網絡應用程序中,我使用了一些會話變量,它們在我登錄時設置:會話變量在asp.net應用程序中超時

Session("user_id") = reader("user_id")

我通過我的應用程序使用它。

當會話變量超時時,主要在連接到數據庫時引發錯誤,因爲某些查詢需要session("user_id")

如何設置我的會話變量,以便一旦它們超時進入登錄頁面或者如何至少增加可用時間長度?

回答

11

我猜您在web.config中正在使用窗體身份驗證。這裏的技巧是確保您的表單身份驗證在會話執行之前到期。

How to redirect to LogIn page when Session is expired (ASP.NET 3.5 FormsAuthen)

例如:

我在這個答案在這裏寫這個

配置您的窗體身份驗證 - 這將超時時間設置爲60分鐘:

<authentication mode="Forms"> 
    <forms defaultUrl="~/Default.aspx" 
     loginUrl="~/Login.aspx" 
     slidingExpiration="true" 
     timeout="60" /> 
</authentication> 

延長會話過期較長時間:

<sessionState 
    mode="InProc" 
    cookieless="false" 
    timeout="70"/> 

在你身後的Login.aspx代碼也可以做一個Session.Clear();分配會話值之前刪除陳舊的會話數據。

1

在過去,我在每個頁面上使用了一個基頁面或母版頁(使登錄頁面發生異常),該頁面讀取會話標記以查看用戶當前是否已登錄。

如果它讀取了空值,它會保存當前的url並重定向到登錄頁面。

登錄後會讀取保存的URL並將用戶重定向回請求的頁面。

增加會話超時值是IIS中的一項設置。

1

如何設置我的會話變量,這樣一旦被超時去登錄頁面

檢查它們是否= NULL做Response.Redirect("Home.aspx");

或如何能至少增加可用的時間長度?

它在sessionState元素

0

我想很多人把他們的會話調用包裝起來以提供一個「延遲加載」模式。類似這樣的:

class SessionHelper 
{ 
    public static string GetUserId() 
    { 
     string userId = (string)System.Web.HttpContext.Current.Session["UserId"]; 

     if(userId == null) 
     { 
      userId = reader("UserId"); 
      System.Web.HttpContext.Current.Session["UserId"] = userId; 
     } 

     return userId; 
    } 
}