基类如何从Global.asax调用Session_End方法

本文关键字:Session End 方法 调用 asax Global 基类 | 更新日期: 2023-09-27 18:27:48

我想在用户的会话过期后将其重定向到登录页面。我创建了一个基本页面,它将被每个aspx代码隐藏文件继承。

我真正想知道的是,在会话超时时调用Session_End()方法后,如何设置basepage方法以自动执行重定向?

我在谷歌上搜索了一个多小时来寻找解决方案,但仍然没有找到。

我以前从未使用过global.asax页面,这是我第一次创建基本页面,因此任何建议或解释都将非常感谢

基类如何从Global.asax调用Session_End方法

我认为这是不可能的,因为当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文件中调用Base page方法。您将在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"/>