自定义 session_end 重定向实现?
Posted
技术标签:
【中文标题】自定义 session_end 重定向实现?【英文标题】:custom session_end redirect implementation? 【发布时间】:2017-05-04 22:08:33 【问题描述】:我正在使用 MVC 应用程序。我有一个要求,当会话结束时,应用程序应该重定向到主页。我需要通用地实现这个逻辑。
我做了一些研究,看起来有一个要求是我需要在 global.asax 的 Session_Start 中为会话设置任何内容。然后会话到期时应该触发 global.asax 中的 Session_End。在会话结束时,我需要确保:
-
用户被重定向到登录页面。我可以重定向到 Session_End 中的基本 url 来完成此操作。
当用户重新登录时,他/她应该被重定向到会话到期时他所在的页面
对我来说,完成上述 #1 和 #2 的最佳方式是什么?
protected void Session_Start(object sender, EventArgs e)
Session["X"] = 1;
protected void Session_End(object sender, EventArgs e)
【问题讨论】:
你熟悉 javascript 吗?您能向我们展示您目前拥有或尝试过的东西吗? 我在 javascript 方面相当先进,但这似乎是我想通过 Session_Start/Session_End 实现的东西。我把这段代码放在上面。 Session_End 中没有任何内容,但 b/c 正是我正在寻找输入/反馈的地方 您应该可以在Session_End
中编写您的重定向代码我想.. 但是您在哪里结束会话..?
我很确定会话会根据 Web.config 中的超时配置设置自动结束
我在考虑手动结束它,就像他们想用退出按钮退出整个网页时一样。你是对的,一旦达到超时时间,它就会自动结束session .. 我们在Angular.js
中做了类似的事情,但它让他们保持在当前页面上,这样他们就不必重新导航
【参考方案1】:
只能在 HTTP 响应中发出重定向(它是响应标头,通常是 302 状态)。只能发送 HTTP 响应以响应 HTTP 请求。因此,如果您想重定向浏览器,您只能在他们请求下一页时进行。当 session_end 事件发生时,你不能神奇地伸出浏览器并让它做一些事情。
将此作为服务器端事件处理不是正确的方法。您需要向页面添加 Javascript 以跟踪剩余的会话时间,并使用 location.href 而不是使用重定向。例如,对于 10 分钟的超时,您可以使用如下内容:
setTimeout(function() location.href="https://www.example.com/timeout.aspx"; , 600000);
【讨论】:
以上是关于自定义 session_end 重定向实现?的主要内容,如果未能解决你的问题,请参考以下文章
可以根据身份验证状态自定义Firebase托管行为(例如,重定向)吗?
Chrome 自定义标签重定向到 Android 应用程序将关闭该应用程序
IdentityServer3 将注销重定向到自定义 URL