繁体   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