我设法使用PHP进行会话,但会话正在合并/混合。如果一个用户登录并访问某个页面,然后新用户访问该同一页面,他们将跳转到第一个用户的会话。
我的代码如下:
session_start();
session_id();
$rainbow = mysqli_query($db, "SELECT * FROM Users WHERE ID='" . $client->ID . "'");
$rainbow = mysqli_fetch_object($rainbow);
$_SESSION['Username'] = $rainbow->Username;
$_SESSION['Password'] = $rainbow->Password;
每次加载页面时,都会调用session_start()
。我还使用session_id()
,因此我不确定为什么会话正在合并。
这已成为一个很大的安全问题。
此外,页面似乎与此问题一起缓存,但它似乎不是由缓存引起的会话问题。如果您刷新页面,您将被放回正确的会话中,页面将被更新,否则,它将不会更新。
答案 0 :(得分:1)
您认为您的问题是会话已合并,但您误解了这种情况。会话正常运行,但您将username
和password
保存为会话变量。
您正在使用名为$client
的变量。您从中获得了一个名为ID
的成员。我确信您在初始化$client
时遇到问题。确保正确初始化$client
,每个会话都有正确的ID
,并且没有SQL注入的可能性。
答案 1 :(得分:0)
尝试这样的事情!
if($password === $password_from_database) {
$_SESSION['email'] = $email;
$_SESSION['okayToken'] = openssl_random_pseudo_bytes(40, "^!hknvkisQwf@#$m);
$_SESSION['loginTime'] = time();
}
使用$_SESSION['okayToken']
进行会话跟踪!
永远不要将passwords
传递给会话。密码哈希甚至没有。
答案 2 :(得分:0)
我已经解决了这个问题,现在,它已经解决了。稍后,它需要更加独特。
目前,我已经为会话提供了密钥,这只是当前的UNIX时间戳。
这似乎保持了会话的独特性,但正如我所说,如果两个用户具有相同的时间戳,它将来需要更加随机化,这将使我回到合并问题,其中会议很困惑。