как показывать или скрывать информацию в зависимости от того, вошел ли пользователь в систему

#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 or userid в качестве индекса.

5. @Johannes спасибо, я исправил опечатку в своем решении