2011-06-07 110 views

回答

0

這是例如檢測會話超時,並重定向到登錄頁面在ASP.NET中,當用戶閒置指定爲web.config文件時發生會話超時。

爲此,我在web.config中將超時值設置爲1分鐘。

第1種方法

在web.config文件中,設置將sessionState模式INPROC和認證方式爲形式

<system.web> 
    <compilation debug="true"/> 
    <authentication mode="Forms"/> 
    <sessionState mode="InProc" cookieless="false" timeout="1"></sessionState> 
</system.web> 

我在這個例子中創建了三個頁面,一個是登錄頁面,當會話到期時,我重定向到這個頁面,一個是導航頁面,我將檢查會話是否有效,如果它是有效的,只有用戶會看到這個頁面,其他明智的他會被重定向到登錄頁面。

在您的應用程序或網站的根目錄中添加Global.asax類文件。 只有在應用程序中存在Global.asax時,此方法纔有效。

在我們想要檢查會話超時的頁面的Page_Init事件中,寫下面提到的代碼。

我們也可以將這段代碼放在一個類中,並繼承此類的所有應用程序頁面,充當所有頁面的基類,以檢查會話超時。

C#代碼

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (Context.Session != null) 
    { 
     if (Session.IsNewSession) 
     { 
      HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"]; 
      if (newSessionIdCookie != null) 
      { 
       string newSessionIdCookieValue = newSessionIdCookie.Value; 
       if (newSessionIdCookieValue != string.Empty) 
       { 
        // This means Session was timed Out and New Session was started 
        Response.Redirect("Login.aspx"); 
       } 
      } 
     } 
    } 
} 

第2種方法。

代碼的Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC 
      "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:Button ID="btnSessionStart" 
         runat="server" 
         OnClick="btnSessionStart_Click" 
         Text="Start Session" /><br /> 
      <br /> 
      <br /> 
      <asp:Button ID="btnCheck" 
         runat="server" 
         OnClick="btnCheck_Click" 
         Text="Check Session ID" /> 
      <br /> 
      <asp:TextBox ID="txtSession" 
         runat="server" 
         Width="266px"> 
      </asp:TextBox><br /> 
      <br /> 
      <asp:Button ID="btnGO" 
         runat="server" 
         OnClick="btnGO_Click" 
         Text="Go to Other Page" /> 
      <br /> 
      <br /> 
     </div> 
    </form> 
</body> 
</html> 

背後這個頁面的代碼是這樣

protected void btnSessionStart_Click(object sender, EventArgs e) 
{ 
    Guid Session_id = Guid.NewGuid(); 
    Session["SessionID"] 
    = Session_id.ToString(); 

} 
protected void btnCheck_Click(object sender, EventArgs e) 
{ 
    if (Session["SessionID"] != null) 
     txtSession.Text = 
     Session["SessionID"].ToString(); 
    else 
     txtSession.Text = 
     "Session has expired"; 
} 
protected void btnGO_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("Default2.aspx"); 
} 

在這裏我們要檢查的會話超時與否,我們頁需要在頁面的Page_Init事件中檢查它,如果會話不爲空,則用戶將能夠訪問該頁面,否則他將被重定向到登錄頁面。

在這個頁面中,我只是把一個按鈕來訪問主頁

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:Button ID="btnHome" 
         runat="server" OnClick="btnHome_Click" 
         Text="Home" /> 
     </div> 
    </form> 
</body> 
</html> 

背後守則此頁

protected void Page_Init(object sender, EventArgs e) 
{ 
    CheckSession(); 
} 
protected void btnHome_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("Default.aspx"); 
} 

private void CheckSession() 
{ 
    if (Session["SessionID"] == null) 
    { 
     Response.Redirect("Login.aspx"); 
    } 

} 

如果我們需要檢查這一切的應用程序頁面比我們可以創建一個BaseClass並寫入上面提到的CheckSession和Page_Init部分代碼,並通過鍵入BaseClassName代替System.Web.UI來驅動此類中的所有頁面。頁面,它會檢查所有頁面的會話超時每頁加載

來源:http://csharpdotnetfreak.blogspot.com/

相關問題