为什么用户$ _SESSION变量出现在不同的用户页面上?

时间:2016-03-03 03:17:16

标签: php mysql session

我有一个简单的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 ?>

2 个答案:

答案 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 ?>