На моем веб-сайте есть функция входа в систему и выхода из системы. После входа в систему, я установил сессионные переменные проходят (который хешируется пароль), UID, который является идентификатором пользователя, вошедшего в систему и LoggedIn (булевой):Переменные сеанса не обновляются на каждой странице
$hashedpass = **hashed pass**;
$_SESSION['pass'] = $hashedpass or die("Fel 2");
$_SESSION['uid'] = $uid or die("Fel 3");
$_SESSION['loggedIn'] = true or die("Fel 4");
header("Location:indexloggedin.php");
На каждой странице, я проверить, если посетитель регистрируется в системе по
- Проверка состояния
$_SESSION['loggedIn']
, - Поиск в базе данных для пользователя с идентификатором
$_SESSION['uid']
, Проверяется хэшируются пароль в базе данных соответствует зашифрованный пароль в переменной сеанса:
$sespass = $_SESSION['pass']; $sesid = $_SESSION['uid']; $sql2 = "SELECT * FROM `users` WHERE `id` = '$sesid'"; $result2 = mysqli_query($db_conx, $sql2); $numrows2 = mysqli_num_rows($result2); if ($numrows2 != 1) { $userOk = false; } while ($row = mysqli_fetch_array($result2,MYSQLI_ASSOC)) { $dbpass = $row['pass']; } if ($sespass != $dbpass) { $userOk = false; } else { $userOk = true; }
Моя проблема заключается в том, что это, кажется, работает на некоторых страницах, в то время как он не работает в других. Например, когда я вхожу в систему, я сразу же заходил на домашнюю страницу, но не на страницу профиля. Однако после нескольких перезагрузок я также зашел на страницу профиля. То же самое происходит при выходе из системы.
Для тестирования я попытался изменить переменные пароля var_dump, а также статус userOk на индексной странице, и именно здесь я заметил что-то интересное. Когда я выхожу из системы, переменные пароля устанавливаются как пустые, а $userOk
- false
, в соответствии с тем, что показано на index.php?msg=loggedout
. Но когда я удаляю ?msg=loggedout
(и оставляю только index.php
), переменные пароля возвращаются к их предыдущему значению, и меня больше не выходят из системы ... После нескольких перезагрузок я снова выхожу из системы.
Почему мои переменные сеанса работают не так, как ожидалось? Кажется, что для обновления требуется время, которое очень странно. Я попытался отключить кеширование (как через заголовки, так и через параметр «Кэш» в моем браузере).
Просто скажите мне, если вам нужно больше информации.
Есть некоторые проблемы с вашим кодом только ... разделяющие нас целые страницами –
Это хорошая практика, чтобы всегда использовать облицовку() перед установкой идентификатора или сеанса в БД –
а где 'session_start() '? – CodeGodie