我最近实现了一个简单的PHP登录系统,它具有以下逻辑:
问题(不是浏览器特定的)有时(在成功代码被发送回来之后,随机地,大约每2或3次中有1次)页面重新加载,会话尚未设置或更改。
jQuery帖子请求:
function tryLogin() {
$.post( "/assets/lib/lib_actions.php?action=login", {email: $(".login-email").val(), passwor$
if (data == "success") {
window.location.replace("url to homepage - don't wish to reveal website");
} else {
$(".login-alert").css("display", "block");
$(".login-alert").html(data);
}
});
}
PHP登录检查:
我试图通过在会话设置的位置插入while循环来解决问题,但仍然没有运气。
public function login($email, $password) { //will update to prepared statements when done
$row = self::$db->query("SELECT * FROM members WHERE email='".$email."'");
if (mysqli_num_rows($row) == 1) {
$row = self::$db->fetchArray($row);
$savedPassword = $row['password'];
$salt = $row['salt'];
$hash = crypt($password, $salt);
if ($savedPassword == $hash) {
while (!isset($_SESSION['uid']) || $_SESSION['uid'] == "Guest") {
session_regenerate_id();
$_SESSION['uid'] = $row['UID'];
session_write_close();
self::$db->query("UPDATE members SET lastActive=now() WHERE UID='".$row['UID$
}
return "success";
}
}
return "Incorrect E-mail or Password";
}
这会检查每个新页面加载:
if (isset($_SESSION['uid']) && $_SESSION['uid'] != "Guest") {
我感谢对此问题的任何帮助或见解。如果需要,我也可以发布任何其他代码。