【问题标题】:Session_End in Global.asax.cs not firing using forms authenticationGlobal.asax.cs 中的 Session_End 未使用表单身份验证触发
【发布时间】:2011-05-26 02:22:49
【问题描述】:

我有一个使用表单身份验证设置为 45 分钟超时的 asp.net 4.0 应用程序。当会话过期时,我想将用户重定向到超时页面。谁能告诉我该怎么做?我正在运行 .net 4.0。

web.config 有:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="~/Login.aspx"
    defaultUrl="~/Default.aspx" protection="All" timeout="45"
    requireSSL="false">
  </forms>
</authentication>

Global.asax.cs 文件有:

void Session_End(object sender, EventArgs e)
{
    Response.Redirect("~/Timeout.aspx");
}  

【问题讨论】:

    标签: c# asp.net forms-authentication session-timeout


    【解决方案1】:

    您的会话状态是如何实现的? Session_End 仅在您使用 InProc 时有效。

    见http://www.eggheadcafe.com/articles/20021016.asp

    【讨论】:

    • 我猜想使用任何会话状态形式的身份验证。
    • 表单身份验证!= 会话状态。
    • 无论如何,默认值是 InProc。您必须手动将其更改为 SQL Server 或其他任何内容。是的,我知道这是 7 年后,但我不在乎。
    【解决方案2】:

    无法在Session_End 方法中进行重定向。它没有作为请求的结果运行,因此它没有Response 对象,并且没有响应重定向到任何地方。

    由于会话到期,无法在浏览器中执行任何操作。 HTTP 协议是面向请求的,因此如果浏览器不请求消息,就无法将消息从服​​务器推送到浏览器。

    浏览器无法确定会话是否已过期。如果您要轮询服务器以检查会话是否已过期,它将使会话保持活动状态,从而破坏了超时的目的。

    您可以在 45 分钟后仅使用客户端脚本进行重定向:

    window.setTimeout(function() {
      window.location.href = '/Timeout.aspx';
    }, 1000*45*60);
    

    但是,这将使重定向仅基于此浏览器窗口上次联系服务器以来的时间。如果同一会话有多个浏览器窗口,则会话实际上可能没有超时。

    【讨论】:

    • 重定向甚至可以是刷新,或者是某种检查会话数据的 ajax 调用。
    • 你是对的。您认为我可以使用 jQuery idleTimer (paulirish.com/2009/jquery-idletimer-plugin) 之类的东西,像使用 (window.setTimeout) 一样将其设置为 45 分钟并重定向?你认为这可能会奏效吗?我可以等待 45 分钟的空闲时间并强制注销/会话结束/重定向。
    • @krefftc:我没有在您链接的页面上阅读太多内容,因为它的动画非常生涩和烦人,但我认为空闲计时器试图找出用户是否处于活动状态在浏览器中与否。会话超时根本不关心用户在浏览器中所做的事情,除非浏览器从服务器获取某些内容,因此它根本不受此影响。因此,setTimeout 将更好地对应于服务器上会话超时的时间。
    • 我发布的网站上有美丽的圣诞雪花动画在你的脸上吹来,有什么不爱的?...不,但说真的,我明白你在说什么,谢谢!
    【解决方案3】:

    在 MVC 上,您可以在 _ViewStart.cshtml 中添加此代码

    _ViewStart.cshtml:

    @{
         Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      
    
         if(Session.IsNewSession)  
             Response.Redirect(“Logout.aspx");// or another page which you want.
    }
    

    How to Redirect on Session End

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-17
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多