#php
#php
Вопрос:
Я пытаюсь разработать веб-сайт, и у меня возникают проблемы с попыткой скрыть информацию, основанную на том, вошел ли пользователь в систему.
Я использую mysqli в качестве базы данных и зарегистрировал тестового пользователя. К сожалению, при использовании echo это не меняет того, что видно.
У меня есть это в заголовке для создания сеанса:
<?php
require 'includes/dbh.inc.php';
session_start();
?>
и затем после этого я использую это в index.php чтобы попытаться показать или скрыть в зависимости от того, вошли ли они в систему:
<?php
if (!isset($_SESSION['userid'])) {
echo '<p class="login-status">You are logged in!</p>';
}
else {
echo '<p class="login-status">You are logged out!</p>';
}
?>
Независимо от того, что я, кажется, делаю, он всегда отображает «вы вошли в систему!»
Комментарии:
1. не могли бы вы предоставить нам выходные
var_dump($_SESSION['userid'])
данные, когда вы ожидаете, что пользователь выйдет из системы?2. Комбинация
!isset($_SESSION['userid'])
иYou are logged in
кажется подозрительной. Как пользователь может войти в систему, если в сеансе нет идентификатора пользователя?3. Ваш синтаксис отключен. Строка, содержащая
!isset()
отображается вошедший в систему, потому что нет сеанса4. Удалите
!
передisset($_SESSION['userid']
, затем он проверяетis index userid in Session set? Display 'You are logged in.'
. На данный момент он проверяетis userid in Session NOT set? Display 'You are logged in.'
, что неверно с логической точки зрения.
Ответ №1:
Вы используете другой индекс в login.inc.php
и index.php
. Попробуйте это в вашем index.php
, и это должно сработать:
<?php
require 'header.php';
?>
<main>
<div class="wrapper-main">
<section class="section-default">
<?php
print_r($_SESSION);
if (isset($_SESSION['idusers'])) {
echo '<p class="login-status">You are logged in!</p>';
}
else {
echo '<p class="login-status">You are logged out!</p>';
}
?>
</section>
</div>
</main>
<?php
require 'footer.php';
?>
Я попробовал ваш код локально, и теперь он работает.
РЕДАКТИРОВАТЬ: я скопировал свой рабочий код с вашего index.php
. Просто замените его в своем index.php
файле.
Комментарии:
1. Я скопировал ваш код прямо в документ, и он не работает: S Я думаю, что это просто я делаю ошибки… если вы можете отредактировать код из GDrive и прокомментировать, где вы обновили, чтобы я мог видеть, что я делаю неправильно, пожалуйста?
2. Я отредактировал этот ответ. Просто скопируйте код в свой
index.php
(удалите все остальное).3. Спасибо, к сожалению, я заменил свой index.php файл, и он все еще не работает? Вносили ли вы изменения в какой-либо другой документ?
4. Пожалуйста, добавьте
print_r($_SESSION)
в свой index.php (прямо передif
) и вставьте выходные данные сюда, пожалуйста. Нет, я больше ничего не изменил.5. Массив ( [idusers] => [uidusers] => user123 )
Ответ №2:
Если вы вводите идентификатор пользователя в сеанс, то для проверки входа в систему вы должны использовать
isset($_SESSION['userid'])
также для проверки того, что $_SESSION[‘userid’] не пуст, используйте var_dump($_SESSION[‘userid’])
чтобы установить значение в сеансе, поэтому после запуска сеанса используйте
$_SESSION['userid']= $yourId_number;
Комментарии:
1. Я удалил! из isset($_SESSION[‘userid’] но теперь он просто указывает, что вы вышли из системы и не вошли в систему даже после входа в систему. Как я могу гарантировать, что есть сеанс?
2. перед операцией if используйте var_dump($_SESSION[‘userid’]);die; для просмотра внутри сеанса
3. Можете ли вы опубликовать код, который задает
$_SESSION['userid']
пожалуйста?4. Я загрузил файлы здесь: drive.google.com/drive/folders /…
5. при подписании или регистрации используйте if (!isset($_SESSION[‘userid’])) $_SESSION[‘userid’]= $userId ; (значение здесь)
Ответ №3:
В файле входа убедитесь, что вы установили переменную сеанса, например
<?php
/* if All credentials correct */
if(!isset($_SESSION)) session_start();
$_SESSION['user_id']= $actual_user_id;
?>
и в индексном файле выполните следующие действия, это будет работать.
<?php
if(!isset($_SESSION)) session_start();
if (isset($_SESSION['user_id'])) {
echo '<p class="login-status">You are logged in!</p>';
}
else {
echo '<p class="login-status">You are logged out!</p>';
}
?>
Комментарии:
1. Спасибо, Хуссейн — я думаю, что установил переменную сеанса, можете ли вы быстро взглянуть и сказать мне, допустил ли я ошибку? drive.google.com/drive/folders /…
2. Похоже, вы никогда не устанавливаете
$_SESSION['userid']
, потому что он вызывается$_SESSION['idusers']
login.inc.php
.3. @Johannes — разве это не установка $_session ‘else if ($pwdcheck == true) { session_start(); $ _SESSION[‘idusers’] = $row[‘idUsers’]; $ _SESSION[‘uidusers’] = $row[‘uidUsers’]; заголовок («Расположение: ../index.php?login=success»); exit(); }’
4. Вы проверяете
userid
, а неidusers
в index.php — это неправильно. Другими словами, вы должны решить, хотите ли вы использоватьidusers
oruserid
в качестве индекса.5. @Johannes спасибо, я исправил опечатку в своем решении