由于不活动+警报框导致会话超时

时间:2013-08-14 08:18:08

标签: php

我正在寻找我的答案的解决方案,这已经完成了一半我必须让用户从我的网站注销,我使用的解决方案如下: -

if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) {

 //have we expired?
    //redirect to logout.php
    header('Location: '.BASE_FULL_PATH.'/user/logout'); //change yoursite.com to the name of you site!!
} else{ //if we haven't expired:
    $_SESSION['last_activity'] = time(); //this was the moment of last activity.
}
$_SESSION['logged_in'] = true; 
$_SESSION['last_activity'] = time(); 
$_SESSION['expire_time'] = 24*60*60;

并且它工作正常,但我需要在会话即将到期时有一个警告框。尝试很多东西但没有帮助。请回复并感谢你的精彩演示

3 个答案:

答案 0 :(得分:0)

this link。我认为此链接将解决您的问题。

您也可以查看我的 Github 链接。点击here。 Github示例适用于我。

答案 1 :(得分:0)

我知道,这不是一种有效的方式,但你可以试试这个。 尝试ajax,每5或10秒的时间间隔在服务器中运行一个php文件。

运行php文件的ajax包含会话last_activity和expire_time比较代码,

<?php
$warning=100;
if( $_SESSION['last_activity']+warning < time()-$_SESSION['expire_time'] ) {
?>
<script type="text/javascript">
alert("Your session will expire soon!");
</script>
<?php
}
?>

您可以设置变量$ warning来调整警报消息时间。

答案 2 :(得分:0)

由于每次重新加载页面时会话过期都会重置,因此您可以将过期时间用作JavaScript setTimeout()函数的时间参数。

var sessionExpiryTime = 24 * 60 * 60;
var sessionExpiryAlertTime  = sessionExpiryTime - 5; //assuming we want the alert to show 5 seconds before expiry
setTimeout(function({ 
    alert("Session about to expire!");
}, sessionExpiryAlertTime * 1000); //time is in milliseconds so we multiply by 1000

只要用户启用了JavaScript,就可以正常工作。如果用户重新加载页面,则到期计时器将根据您的php代码进行更新,并且setTimeout()函数将重新启动。