关于这个问题有很多问题,但我想在我的案例中没有一个可以帮助我。我将向您显示我的登录表单,我的主页面,显示活动用户,并且对于启动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)设置为零。你能帮我解释一下它的逻辑吗?
答案 0 :(得分:0)
然后,您需要保存数据库中每个用户的session_id。 然后在一个cron中,有一个脚本检查与每个会话相关联的文件是否存在。
如果您不想弄乱配置文件,请按以下步骤查找会话文件夹:
<?php
echo session_save_path ();
?>
然后,您的cron脚本可以将结果保存在txt文件中,这样可以让您的网站脚本更容易阅读(或者更好,将其保存在内存中,以便更快 - 结帐redis)。