Я только что закончил создание сайта, который включает страницу входа. Когда пользователь пытается войти, я проверяю имя пользователя и пароль по базе данных. Если они совпадают, я запускаю сеанс и устанавливаю переменные сеанса 'id' и 'uid', например, так:
$sql = "SELECT * FROM users WHERE uidUsers = ? OR emailUsers = ?";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../login.php?error=sqlerror");
exit();
}
else {
mysqli_stmt_bind_param($stmt, "ss", $mailuid, $mailuid);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$pwdCheck = password_verify($password, $row['pwdUsers']);
if ($pwdCheck == false) {
header("Location: ../login.php?error=wrongpwd&mail=".$mailuid);
exit();
}
elseif($pwdCheck == true) {
session_start();
$_SESSION['id'] = $row['idUsers'];
$_SESSION['uid'] = $row['uidUsers'];
header("Location: ../login.php?login=success");
exit();
}
else {
header("Location: ../login.php?error=wrongpwd");
exit();
}
}
else {
header("Location: ../login.php?error=nouser&mail=".$mailuid);
exit();
}
}
В моем заголовочном файле. php, который связан с каждым php страница, использующая include 'header.php';
, у меня есть php код, который отображает либо кнопки входа / регистрации (если $_SESSION['id']
не установлено), либо кнопку выхода (если установлена $_SESSION['id']
). Я также начал сеанс в шапке. php страница. Вот как выглядит код заголовка. php выглядит так:
session_start();
if (isset($_SESSION['id'])) {
echo
"<div id='logout-form'>
<form action='includes/logout.inc.php' method='post'>
<button type='submit' name='logout-submit'>Log Out</button>
</form>
</div>";
}
else {
echo
"<div id='header-form'>
<form action='includes/login.inc.php' method='post'>
<button type='submit' name='login-button-header'>Log In</button>
</form>
<button id='signup-button'><a href='signup.php' class='header-signup'>Sign Up</a></button>
</div>";
}
if (isset($_SESSION['id'])) {
echo '<p class="greeting">Hello, <span class="greetingName">' . $_SESSION['uid'] . '</span></p>';
}
date_default_timezone_set("America/Los_Angeles");
Используя xampp, я подключен к apache серверу в автономном режиме. При просмотре моего сайта сеансы работают для каждой страницы; если я вхожу в систему, регистрируется, что я вошел на каждую страницу, на которую я go, как и должно быть. Однако, когда я опубликовал свой веб-сайт несколько дней в go, мне было трудно узнать, был ли я в системе или нет. URL моего сайта: writingboxco.com , если вы хотите узнать, о чем я собираюсь поговорить. Когда я вхожу, мне кажется, что я захожу на каждую веб-страницу; Я знаю это, потому что он предоставляет сообщение «Hello, [username]» на каждой странице, что происходит только при установке $_SESSION['id']
. Тем не менее, когда я нажимаю «Выйти» и go вернуться на домашнюю страницу, он все еще думает, что я вошел в систему (потому что я, вероятно, есть, но я не знаю почему). При нажатии кнопки «Выйти» запускается скрипт «logout.in c. php». В этом файле я сбрасываю и уничтожаю переменные сеанса, например:
session_start();
session_unset();
session_destroy();
$_SESSION = [];
header("Location: ../login.php");
Кроме того, я вхожу в систему только на некоторых страницах веб-сайта. Некоторые из них регистрируют, что я вышел из системы, а другие нет. Я не уверен, почему я остаюсь в системе после нажатия кнопки «Выйти», которая должна уничтожить переменные сеанса. Когда мой сайт используется в автономном режиме, он работает отлично; когда я выхожу, каждая страница понимает это. Однако, когда он-лайн, он не работает для каждой страницы. Это работает только для некоторых (некоторые страницы остаются в системе, а некоторые страницы правильно выходят из системы). Кроме того, когда я пытаюсь войти в систему с альтернативной учетной записью, он регистрируется, но на некоторых страницах сообщение «Hello [username]» по-прежнему отображает имя учетной записи, из которой я только что вышел, вместо учетной записи, в которую я только что вошел. в. Есть идеи, в чем может быть проблема? Это проблема с невозможностью уничтожить переменные сеанса? Может ли это быть другой код, на который я должен смотреть? Спасибо.
ОБНОВЛЕНИЕ: Я обнаружил, что в файле error_log
есть сообщение об ошибке [28-Jan-2020 00:02:56 UTC] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home1/writipe3/public_html/searchUsers.php:1) in /home1/writipe3/public_html/header.php on line 5
. Есть идеи, почему это будет происходить?