baseclass如何从Global.asax调用Session_End方法?

时间:2013-08-14 10:16:48

标签: c# asp.net

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

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

我已经在谷歌搜索了一个多小时的解决方案,但仍然很短。

我之前从未使用过global.asax页面,这是我第一次创建基页,所以任何建议或解释都会非常好,谢谢

4 个答案:

答案 0 :(得分:2)

我不认为这是可能的,因为当Session_End被触发时,用户长时间处于非活动状态,并且可能已经关闭了连接。

您需要做的是在所有页面中运行某种javascript计时器,这会在用户过期时重定向。

亲切的问候,

埃德。

答案 1 :(得分:2)

您的问题: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页面方法。您将在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

答案 2 :(得分:1)

嗯,身份验证基于cookie(至少是表单身份验证,我不确定基于Windows)。 当您收到没有关联会话的经过身份验证的请求时,您可以简单地删除此cookie。登录时,您将创建会话。

你可以用

删除auth cokie
FormsAuthentication.SignOut();

答案 3 :(得分:0)

在我和同事之间,我们设法解决了这个问题。

解决方案如下:

在我的应用程序中,我使用会话变量来存储用户名。

一旦会话超时,当然用户名会话变量将从内存中清除。这是我需要强制应用程序返回索引页面的触发器。

解决方案

第1步:

//在基类中输入以下代码

   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"/>