簡體   English   中英

基類如何從Global.asax調用Session_End方法?

[英]How does the baseclass call the Session_End method from Global.asax?

我想在用戶會話期滿后將其重定向到登錄頁面。 我創建了一個基礎頁面,該基礎頁面將由文件后面的每個aspx代碼繼承。

我真正想知道的是,一旦會話超時調用了Session_End()方法,您如何才能將basepage方法設置為自動執行重定向?

我已經在Google上搜索了一個多小時,以尋求解決方案,但是仍然很短。

我以前從未使用過global.asax頁面,這是我第一次創建基礎頁面,因此任何建議或解釋都將非常感謝

我認為這是不可能的,因為當Session_End被觸發時,用戶長時間處於不活動狀態,並且可能已經關閉了連接。

您需要做的是在所有頁面中運行某種javascript計時器,該計時器將在用戶過期后將其重定向。

親切的問候,

埃德溫。

您的問題: how can you set the basepage method to automatically perform the redirect once the Session_End() method has been called on session timeout

您可以從global.asax文件中調用基本頁面方法。 您將在Session_End()中調用此方法[在會話過期或結束時調用]。 在此basePage方法中,放入用於重定向的自定義邏輯。

但是,您應該同意,如果需要從外部調用PAGE方法,那么在一定程度上肯定是不好的設計。

Base.aspx:

public class BasePage : Page
{

    public static void MyMethod()
    {
        ...
    }

}

Global.asax中

void Session_End(object sender, EventArgs e) 
{
  BasePage.MyMethod();

}

請參閱此帖子以獲取更多詳細信息: http : //forums.asp.net/t/1426012.aspx/1

好吧,身份驗證基於Cookie(至少是表單身份驗證,對於基於Windows的身份我不確定)。 當您收到沒有關聯會話的經過身份驗證的請求時,只需刪除此cookie。 登錄后,您將創建會話。

您可以使用以下方式刪除auth cokie

FormsAuthentication.SignOut();

在我自己和一個工作同事之間,我們設法解決了這個問題。

解決方法如下:

在我的應用程序中,我使用了一個會話變量來存儲用戶名。

一旦會話超時,則當然會從內存中清除用戶名會話變量。 這是我迫使應用程序返回索引頁面所需的觸發器。

第一步:

//在基類中輸入以下代碼

   protected override void OnLoad(EventArgs e)
    {
        if (Session["username"] == null)
        {
            Response.Redirect("~/SessionTimeout.aspx");
        }
        base.OnLoad(e);
    }

第二步:

對於文件后面的每個aspx代碼(即Web表單的aspx.cs文件),而不是從默認頁面(System.web.UI.Page)繼承,都從基頁繼承:

   public partial class SessionTimeout : BasePage
    {
    }

最后一步:

設置sessionState屬性

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM