gpt4 book ai didi

c# - Global.asax.cs 中的 Session_End 未使用表单例份验证触发

转载 作者:行者123 更新时间:2023-11-30 19:49:08 25 4
gpt4 key购买 nike

我有一个使用表单例份验证的 asp.net 4.0 应用程序,超时时间设置为 45 分钟。我想在 session 过期时将用户重定向到超时页面。谁能告诉我该怎么做?我正在运行 .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");
}

最佳答案

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

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

浏览器无法知道 session 是否已过期。如果您要轮询服务器以检查 session 是否已过期,它会使 session 保持事件状态,从而违背超时的目的。

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

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

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

关于c# - Global.asax.cs 中的 Session_End 未使用表单例份验证触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com