我尝试将我的页面重定向到具有一定量不活动的登录用户,而不会杀死会话。
我想减去从会话中第一页上花费的时间,将用户放在新页面上,然后在会话(其余会话时间)超时后将用户注销并重定向用户到登录页面。
我发现了这个:
HttpContext.Current.Response.AppendHeader("Refresh", Convert.ToString(((HttpContext.Current.Session.Timeout * 2) - 5)) + "; Url=Dashboard.aspx");
但这会干扰我的母版页:
Context.Response.AppendHeader("Refresh",Convert.ToString((Session.Timeout * 60)) + "; URL=" + ResolveUrl("~/Logout.aspx"));
如果更容易,则用户会话不需要在用户在第一页上花费的时间减去。
我可能在Google上错过了一个简单的JavaScript吗?
谢谢, 帕特里克
答案 0 :(得分:1)
好的,我做了以下事情来解决这个问题:每次用户点击按钮时,我都会调用detime(),并且在page_load上我调用detime()。也许不是最好的解决方案,但至少我得到了我想要的东西;)
function timer()
{
time1 = window.setTimeout('redirect();', 300000);
}
function redirect()
{
window.location = "XXX.aspx";
}
function detime()
{
if (time1 !=null) {
window.clearTimeout(time1);
time1 = null;
}
timer()
}
答案 1 :(得分:0)
嗯,我想这取决于您的服务器平台,但根据我的经验,它是确定会话超时的服务器。客户端代码触发的重新加载,除非您以某种方式覆盖服务器的正常行为,刷新会话并重新启动计时器。
现在,您可以做的是更新页面客户端,而不是与服务器通信。为此,您可以在加载原始页面的同时将代码有效地加载到“几乎超时”页面。然后,当您的超时触发时,您只需显示所需的页面并隐藏其中的任何内容。
我建议您考虑这个整体方案的可用性问题。
答案 2 :(得分:0)
您想要做的就是将时间戳与重定向一起传递,然后捕获时间戳,并使用它,如果未定义,则使用当前时间作为用户启动的时间。然后,一旦该时间用完,就会将用户发送到显式注销,以终止其会话。
只要您重定向到明确杀死会话的页面,我认为您没有过期问题。在用户被重定向到新页面的情况下接受,然后关闭浏览器,这可能你可以使用onunload脚本再次明确地终止会话。