PHP会话混合

时间:2016-02-18 12:17:11

标签: php session

我设法使用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(),因此我不确定为什么会话正在合并。

这已成为一个很大的安全问题。

此外,页面似乎与此问题一起缓存,但它似乎不是由缓存引起的会话问题。如果您刷新页面,您将被放回正确的会话中,页面将被更新,否则,它将不会更新。

3 个答案:

答案 0 :(得分:1)

您认为您的问题是会话已合并,但您误解了这种情况。会话正常运行,但您将usernamepassword保存为会话变量。

您正在使用名为$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时间戳。

这似乎保持了会话的独特性,但正如我所说,如果两个用户具有相同的时间戳,它将来需要更加随机化,这将使我回到合并问题,其中会议很困惑。