我有一个简单的PHP和MySQL站点,用于验证数据库中的用户,然后为会员号,名字和姓氏设置$ _SESSION变量。
今天,在线网络研讨会后,多个成员同时登录以记录活动,当导航到不同页面时,其他成员名称显示出来(名称使用php echo显示$ _SESSION [fname]和[lname] ])。我之前没有看到过这种情况,我最近更新了我的代码以使用PDO语句等,但仅用于数据库查询,我没有改变$ _SESSIONs启动或处理的方式,所以我认为这与我没有任何关系它
我已经尝试过使用测试帐户从两个不同的浏览器登录来测试这个,但只是让它搞乱了几次,然后再次正常工作。
怎么会发生这种情况?有人可以建议一种方法来防止这种情况发生吗?任何帮助将不胜感激。
我的会话代码如下:
<?php session_start(); ?>
<?php if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 600)) {
// last request was more than 10 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp ?>
答案 0 :(得分:0)
来自声明:
导航到不同页面时,其他成员名称显示
..这听起来像是一个不同的问题。当框架/服务器使用缓存时,可能会发生这种情况,无论是服务器本地还是基于服务(清漆,弹性缓冲等)
您是否正在使用服务器/您正在使用的代码或框架中的任何缓存机制?如果是这样,请在短期内将其关闭,并进行更多测试。如果这不起作用,请更新您的问题,并提供有关您的问题的更多信息 - 症状,要证明的测试,采取的措施等。
干杯!
答案 1 :(得分:0)
我在session_regenerate_id(TRUE);
之后添加了session_start()
,似乎解决了这个问题。我的理解是,这将重新生成session_id并删除旧的。这仍然使我的$_SESSION
变量在页面之间保持活动状态,这正是我所需要的(我不能很好地理解这个功能,以便理解为什么)。
如果有更好的解决方案可以解决这个问题,或者我还没有发现其他问题,请发表评论。现在我的问题已经停止了。
<?php session_start();
session_regenerate_id(TRUE);
?>
<?php if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 600)) {
// last request was more than 10 minutes ago
session_unset(); // unset $_SESSION variable for the run-time
session_destroy(); // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp ?>