一台计算机上的多个会话相互覆盖

时间:2018-05-18 16:37:50

标签: php

我创建了一个忘记密码功能,只要一次激活一个会话,一切都很好。运行多个会话时,它们会相互重叠。我不知道如何解决这个问题。我认为通过传递seeion变量,我可以通过电子邮件识别会话。如果有人可以告诉我我做错了什么,或者如何正确地运行多个会话,那将非常感激。提前谢谢。

    function forgot_submit(){
        GLOBAL $db;
        if (isset($_GET['forgot']) && $_GET['forgot'] == 'true') {
            $email     = $_POST['forgot_password'];
            $token     = "1234567890qwertyuiopasdfghjklzxcvbnm";
            $token     = str_shuffle($token);
            $token     = substr($token, 0, 10);
            mail($email, "Password Reset", "To reset you password, please enter this code: $token", "from: noreply@yahbang.com");
            $Query = $db->prepare("UPDATE user SET forgotToken='$token' WHERE email='$email'");
            $Query->execute();
            if ($Query) {
                $_SESSION['email'] = $email;
                echo json_encode(['error' => 'success', 'msg' => 'resetPassword.php']);
            }

        }
    }////close forgot submit///////////
    forgot_submit();

1 个答案:

答案 0 :(得分:1)

会话是您希望与特定用户关联的一大块数据(无论用户是否经过身份验证,用户名,还是您不想在每次加载页面时从数据库中获取的其他内容)。每个页面加载都需要session_start()来打开数据,在添加$_SESSION键之前,数据将为空。 PHP引擎通过cookie变量识别每个会话。如果您只在一个浏览器中设置$_SESSION['email'],则会得到相同的答案。

话虽如此,一旦用户决定他们需要新密码,您应该立即销毁会话:session_destroy()以便用户注销并重新进行身份验证。

此外,在您的下一次升级中,准备好的语句应该bound values or parameters带有命名或问号占位符。