可能重复:
Automatically re-direct a user when session Times out or goes idle…
我有一个登录系统并且会话到期,但是他们需要刷新页面以再次显示登录屏幕。相反,我的用户输入数据并点击提交以找出他们已被注销。
会话过期后,有没有办法让页面自动重定向到登录页面?
谢谢!
编辑:::
通过查看之前提到的问题Here,我已经使用了此应用程序的已接受答案。谢谢大家的建议。
答案 0 :(得分:1)
您可以使用meta-refresh标记,例如10分钟后重定向:
<meta http-equiv="refresh" content="600;url=http://example.com/" />
这不是一种非常用户友好的方式来处理会话到期,特别是对于您突出显示的用例。
更好的技术是通过拾取keypress和mousemove事件来使用Javascript跟踪用户活动。每隔一分钟,如果有一些活动,则启动XMLHttpRequest以使会话保持活动状态。
假设您的会话在10分钟后过期,并且此JS注意到当时没有用户活动,它可以在您的页面的横幅内警告用户他们的会话已过期并提供重新建立会话的方法等。< / p>
这样,进行数据输入的人或(无论表格是什么)如果他们花时间就不会丢失会话,如果他们离开办公桌吃午饭就不会被重定向!
答案 1 :(得分:1)
PHP函数ini_get可用于在创建页面时读取会话生存期 会话过期后,JavaScript可用于执行重定向。
// javascript
var logout = function () {
//redirect code
};
setTimeout(logout, <%= 1000 * (int)ini_get("session.gc_maxlifetime") %>);
答案 2 :(得分:0)
您可以使用javascript定期检查会话是否已过期,然后重定向(如果有)。实现取决于您的身份验证系统的详细信息,但基本上涉及将会话的到期时间传递给页面,然后将到期时间与当前时间进行比较,直到会话过期。
编辑:示例
我使用prototype.js,所以如果你使用其他框架(或者只是原始的JS),你将不得不适应它。
<input type="hidden" id="expiration" value="<?php echo(time() + SESSION_TTL) ?>" />
<script type="text/javascript">
new PeriodicalExecuter(function(pe) {
if(getTime() >= parseInt($('expiration'))) {
window.location = "http://session.expired.com"
}
}
</script>
应该按照你想要的方式做点什么。
答案 3 :(得分:0)
我也使用Javascript解决方案。我们的登录页面会破坏会话,因此我们有一个计时器,在每次页面加载时重置为零。如果该计时器到期,它将重定向到登录页面,这会破坏会话。
答案 4 :(得分:0)
嗯,最佳地,用户使用您的表单发送的数据会暂时保存,用户有机会再次登录,然后被重定向到他来自的页面,已经填充了旧数据。必须两次输入数据(或者如果你处于某种程度的中间,页面本身会在一段时间后重定向)是相当烦人的。
如果您想在不保留页面上输入的数据的情况下重定向,您至少应该向用户显示他在页面到期之前剩余的时间。使用JavaScript应该是一个很好的选择。