在不活动后重定向用户,但保持会话活动

时间:2009-10-14 15:19:42

标签: c# asp.net javascript

我尝试将我的页面重定向到具有一定量不活动的登录用户,而不会杀死会话。

我想减去从会话中第一页上花费的时间,将用户放在新页面上,然后在会话(其余会话时间)超时后将用户注销并重定向用户到登录页面。

我发现了这个:

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吗?

谢谢, 帕特里克

3 个答案:

答案 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脚本再次明确地终止会话。