6

我发现了一些类似的问题,但没有一个给我我真正需要的东西。

这是事情,我已将其添加到我web.config的处理用户会话到期:

<sessionState mode="InProc" timeout="1" />

1分钟后,引发Session_End事件:Global.asax

Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect("Login.aspx")
End Sub

这不起作用,因为:

Response is not available in this context.

(顺便说一句,这个问题得到了一个答案,表明这没问题,并且得到了赞成)。

我不想要任何花哨的东西。我只想要一种简单的方法在会话时间到期时将用户重定向到登录页面。就这样。

谢谢你。

4

4 回答 4

3

描述

您可以Page_Initglobal.asax

样本

Protected Sub Page_Init(sender As Object, e As EventArgs)
 If Context.Session IsNot Nothing Then
  If Session.IsNewSession Then
   Dim newSessionIdCookie As HttpCookie = Request.Cookies("ASP.NET_SessionId")
   If newSessionIdCookie IsNot Nothing Then
    Dim newSessionIdCookieValue As String = newSessionIdCookie.Value
    If newSessionIdCookieValue <> String.Empty Then
     ' This means Session was timed Out and New Session was started
     Response.Redirect("Login.aspx")
    End If
   End If
  End If
 End If
End Sub

更多信息

于 2012-09-19T20:25:10.020 回答
2

Session_End 是一个服务器端事件,意味着它是在 Web 服务器上触发的,与客户端的请求无关。这就是请求不可用的原因。

在这件事上你有两个选择:

  1. 在每个客户端请求上,检查是否设置了特定的 Session 变量。如果不是,则表示之前的 Session 已过期,必须填充新的 Session。(我假设这就是您要检查会话到期的原因)

  2. 在客户端上进行 javascript 调用,定期返回服务器以检查 Session 是否仍然有效。如果 Session 已过期,您可以将用户重定向到登录页面。

不同重定向方法的示例

location.href = "login.aspx";
// or you can use 
location.assign("login.aspx");
//for redirecting without storing in history
location.replace("login.aspx")

不要忘记添加?ReturnUrl=[current url]到登录重定向路径。

高温高压

于 2012-09-19T20:53:48.817 回答
0

检查每个 Page_Init 事件的过期会话。如果有太多页面要做这个检查,我通常会这样做:

  • 我创建了一个基类并从 System.Web.UI.Page 继承。
  • 在我的基类的 Page_Init 事件中编写我的重定向逻辑。
  • 让我的其余页面继承自这个基类。

祝你好运。

于 2012-09-19T22:14:22.630 回答
0

这是dknaack 答案的 C# 版本:

protected void Page_Init(object sender, EventArgs e)
{
    if (Context.Session != null)
    {
        if (Session.IsNewSession)
        {
            HttpCookie newSessionIdCookie = Request.Cookies["ASP.NET_SessionId"];
            if (newSessionIdCookie != null)
            {
                string newSessionIdCookieValue = newSessionIdCookie.Value;
                if (newSessionIdCookieValue != string.Empty)
                {
                    // This means Session was timed Out and New Session was started
                    Response.Redirect("Login.aspx");
                }
            }
        }
    }
}
于 2014-11-27T16:02:05.197 回答