不活动后重定向用户,但保持会话活动
Posted
技术标签:
【中文标题】不活动后重定向用户,但保持会话活动【英文标题】:redirect user after inactivity, but keep session alive 【发布时间】:2010-12-06 17:24:00 【问题描述】:我尝试在不终止会话的情况下将我的页面重定向到具有一定程度不活动的已登录用户的页面。
我想从会话中减去我在第一页上花费的时间,将用户放在新页面上,然后在他的会话(剩余会话时间)超时后注销用户并重定向用户到登录页面。
我发现了这个:
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"));
如果更简单,用户会话不需要减去用户在第一页上花费的时间。
是否有我在谷歌上错过的简单 javascript?
谢谢, 帕特里克
【问题讨论】:
【参考方案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()
【讨论】:
【参考方案2】:看起来您想要做的是将时间戳与重定向一起传递,然后捕获时间戳并使用该时间戳,或者如果未定义,则使用当前时间作为用户开始的时间。然后,一旦该时间用完,就将用户发送到显式注销,从而终止他们的会话。
只要您重定向到明确终止会话的页面,我认为您不会遇到过期问题。在用户被重定向到新页面的情况下接受,然后关闭浏览器,也许您可以使用 onunload 脚本再次显式终止会话。
【讨论】:
【参考方案3】:好吧,我想这取决于您的服务器平台,但根据我的经验,决定会话超时的是服务器。除非您以某种方式覆盖服务器的正常行为,否则您的客户端代码触发的重新加载将刷新会话并重新启动计时器。
现在,您可以做的是更新页面客户端而不与服务器对话。为此,您将在加载原始页面的同时有效地将代码加载到“几乎超时”页面。然后,当您的超时触发时,您只需显示所需的页面并隐藏那里的任何内容。
我建议您考虑这个整体方案的可用性问题。
【讨论】:
以上是关于不活动后重定向用户,但保持会话活动的主要内容,如果未能解决你的问题,请参考以下文章
当用户会话处于活动状态时使用 Laravel 5.7 中的 Auth 重定向到页面的方法