我创建了一个忘记密码功能,只要一次激活一个会话,一切都很好。运行多个会话时,它们会相互重叠。我不知道如何解决这个问题。我认为通过传递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();
答案 0 :(得分:1)
会话是您希望与特定用户关联的一大块数据(无论用户是否经过身份验证,用户名,还是您不想在每次加载页面时从数据库中获取的其他内容)。每个页面加载都需要session_start()
来打开数据,在添加$_SESSION
键之前,数据将为空。 PHP引擎通过cookie变量识别每个会话。如果您只在一个浏览器中设置$_SESSION['email']
,则会得到相同的答案。
话虽如此,一旦用户决定他们需要新密码,您应该立即销毁会话:session_destroy()
以便用户注销并重新进行身份验证。
此外,在您的下一次升级中,准备好的语句应该bound values or parameters带有命名或问号占位符。