2

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

我真正想知道的是,一旦在会话超时时调用了 Session_End() 方法,如何将基本页面方法设置为自动执行重定向?

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

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

4

4 回答 4

2

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

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

亲切的问候,

埃德温。

于 2013-08-14T10:22:07.810 回答
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 文件中调用您的基本页面方法。您将在 Session_End() [ 会话到期或结束时调用此方法] 中调用此方法。在此 basePage 方法中放置您的自定义逻辑以进行重定向。

但是,您应该同意,如果您需要从外部调用 PAGE 方法,这在一定程度上肯定是一个糟糕的设计。

Base.aspx:

public class BasePage : Page
{

    public static void MyMethod()
    {
        ...
    }

}

全球.asax

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

}

有关详细信息,请参阅此帖子:http ://forums.asp.net/t/1426012.aspx/1

于 2013-08-14T11:22:50.083 回答
1

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

你可以删除 auth cokie

FormsAuthentication.SignOut();
于 2013-08-14T10:24:20.210 回答
0

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

解决方法如下:

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

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

解决方案

第一步:

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

   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"/>
于 2013-08-14T14:59:35.017 回答