我想让一个计时器在页面上每3分钟运行一次(javascript),以检测php会话($ _SESSION)是否超时......如果是,则自动重定向它们。
一个很好的例子,一个用户登录并运行楼梯,并且永远不会回来......我希望javascript通过一个简单的重定向来记录它们......
这可能吗?我怎么做这样的事情?我正在使用PHP和javascript。
修改: Rob在下面说的正是我正在寻找的......我安全地引用了''...
我怀疑迈克要求的是,当会话超时时,应该告诉浏览器离开当前页面。例如,一些银行在一段时间不活动后这样做。 - Rob Kennedy 5小时前
答案 0 :(得分:11)
您可以使用简单的元刷新:
<meta http-equiv="refresh" content="180;url=http://example.com/logout" />
或者您使用PHP实现超时:
session_start();
if (isset($_SESSION['LAST_REQUEST_TIME'])) {
if (time() - $_SESSION['LAST_REQUEST_TIME'] > 180) {
// session timed out, last request is longer than 3 minutes ago
$_SESSION = array();
session_destroy();
}
}
$_SESSION['LAST_REQUEST_TIME'] = time();
如果会话仍然有效,则无需每隔3分钟检查一次。
答案 1 :(得分:1)
肯尼迪先生指出我的原始解决方案(下方)不起作用。所以这是一种方法。
在用户数据库中,保留每次用户加载页面时更新的最后活动时间戳。
然后在checkaccess.php
if ( time-last_access > max_inactivity_time ) {
return array('access' => '0');
}
else {
return array('access' => '0');
}
在javascript计时器(下面)中调用checkaccess.php并相应地注销
这也允许“当前登录的用户”功能
谢谢肯尼迪先生
根据当前用户会话的有效性创建一个返回1或0的php页面
然后在您想要超时的页面中将此添加到头部(您需要jquery)
setInterval(function(){
var url = UrL_OF_SESSION_CHECKING_PAGE;
$.getJSON( url,
function( data ) {
if (data.access=='0') {
window.location = LOGIN_PAGE;
}
}
);
}, 180000);
每180秒(3分钟)它会请求php页面并获得会话的有效性。如果无效,则会重定向到登录页面
如果用户打开多个页面,页面会超时并在不同时间重定向,因为他们的计时器不同。
这是一个关于javscript计时器的好页面 http://ejohn.org/blog/how-javascript-timers-work/
简单会话检查页面
session_start();
die(
json_encode(
isset( $_SESSION['VARIABLE'] ) ? array( 'access' => '1') : array( 'access' => '0' )
)
);
将VARIABLE更改为您的一个会话变量
答案 2 :(得分:0)
如果您希望在页面刷新之前发生这种情况,您需要定期进行ajax调用。您可以使用jQuery Heartbeat每3分钟拨打一次电话,并使用其他用户已提供的其中一种PHP方法来检查会话