在浏览器关闭注销

时间:2014-03-01 09:14:31

标签: php

关于这个问题有很多问题,但我想在我的案例中没有一个可以帮助我。我将向您显示我的登录表单,我的主页面,显示活动用户,并且对于启动lastTimeUpdate函数很困惑。 这是我的主要形式,问题是如果用户处于活动状态,则会有一个活动用户列表如果没有显示他的名字 - 不显示,但如果用户退出浏览器,会话销毁,但不会注销:

<?php
include 'config.php';
//include 'logout.php';
$query = "SELECT * FROM userinfo WHERE `ifactive` = 1";
if(isset($_SESSION['uname'])){

$result = mysql_query($query);
echo "<div id=maincontenttopleft>
<p>Active users</p>";
echo "<div id=acuser><table  id=activeusers>"; 

while($row = mysql_fetch_array($result)){ 
echo  "</td><td>" . $row['name'] . "</td></tr>";
}
echo "</table></div>"; 
mysql_close();
}
//if (session_destroy()) {
//mysql_query("SELECT * FROM `userinfo` WHERE `ifactive` = 1 AND `uname` !=  
'$_SESSION[uname]'");
//mysql_query("UPDATE `userinfo` SET `ifactive` = 0 WHERE `uname` !=  
'$_SESSION[uname]'") or die(mysql_error());
//}
if (!isset($_SESSION['uname'])) {
$_SESSION['uname'] = time();
} else if (time() - $_SESSION['uname'] > 10) {
 // session started more than 30 minutes ago
 //mysql_query("SELECT * FROM `userinfo` WHERE `ifactive` = 1 AND `uname` =  
'$_SESSION[uname]'");
//mysql_query("UPDATE `userinfo` SET `ifactive` = 0 WHERE `uname` = 
'$_SESSION[uname]'") or die(mysql_error());
session_regenerate_id(true);    // change session ID for the current session an    
invalidate old session ID
$_SESSION['uname'] = time();  // update creation time
}
?>

我想检查是否存在被破坏的会话,根据名称将此会话的名称结束,以将我的布尔值(ifactive)设置为零。你能帮我解释一下它的逻辑吗?

1 个答案:

答案 0 :(得分:0)

然后,您需要保存数据库中每个用户的session_id。 然后在一个cron中,有一个脚本检查与每个会话相关联的文件是否存在。

如果您不想弄乱配置文件,请按以下步骤查找会话文件夹:

<?php

echo session_save_path ();

?>

然后,您的cron脚本可以将结果保存在txt文件中,这样可以让您的网站脚本更容易阅读(或者更好,将其保存在内存中,以便更快 - 结帐redis)。