Почему не работает $_SESSION?

Ссылка скопирована
1 ответ

Я хочу сделать так, чтобы кнопка "Выйти из аккаунта" появлялась тогда, когда человек вошёл в аккаунт. В остальное врем этой кнопки быть не должно. Сейчас у меня всегда весит кнопка выйти.

<div class="dropdown navigator d-xxl-block d-none">   	<button class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">     	<i class="bi bi-person"></i>   	</button>   	<ul class="dropdown-menu dropdown-menu-dark">     	<li><a class="dropdown-item" href="#"><i class="bi bi-info-circle" style="margin-right: 6px;"></i>Информация</a></li>     	<li><a class="dropdown-item" href="#">Тут просто текст</a></li>     	<?php       		if (isset($_SESSION['logged_user'])) {     			echo '<li><a class="dropdown-item" href="includes/logout.php" ><i class="bi bi-box-arrow-up-left" style="margin-right: 6px;"></i>Выйти</a></li>';     		} else 				echo '<li><a class="dropdown-item" href="includes/login.php"><i class="bi bi-box-arrow-down-right" style="margin-right: 6px;"></i>Войти</a></li>';      	?>   	</ul> </div>

<div class="dropdown navigator d-xxl-block d-none"> <button class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false"> <i class="bi bi-person"></i> </button> <ul class="dropdown-menu dropdown-menu-dark"> <li><a class="dropdown-item" href="#"><i class="bi bi-info-circle" style="margin-right: 6px;"></i>Информация</a></li> <li><a class="dropdown-item" href="#">Тут просто текст</a></li> <?php if (isset($_SESSION['logged_user'])) { echo '<li><a class="dropdown-item" href="includes/logout.php" ><i class="bi bi-box-arrow-up-left" style="margin-right: 6px;"></i>Выйти</a></li>'; } else echo '<li><a class="dropdown-item" href="includes/login.php"><i class="bi bi-box-arrow-down-right" style="margin-right: 6px;"></i>Войти</a></li>'; ?> </ul> </div>

Файл подключения:

<?php ini_set('session.gc_maxlifetime', 3600*24*30);     ini_set('session.cookie_lifetime', 3600*24*30);     session_start(); require 'includes/config.php'; require 'rb/rb.php'; R::setup( 'mysql:host=localhost;dbname=BlueRedit',     'root', '' ); ?>  <?php  $connect = mysqli_connect(     $config['db']['server'],     $config['db']['username'],     $config['db']['password'],     $config['db']['name'] );

<?php ini_set('session.gc_maxlifetime', 3600*24*30); ini_set('session.cookie_lifetime', 3600*24*30); session_start(); require 'includes/config.php'; require 'rb/rb.php'; R::setup( 'mysql:host=localhost;dbname=BlueRedit', 'root', '' ); ?> <?php $connect = mysqli_connect( $config['db']['server'], $config['db']['username'], $config['db']['password'], $config['db']['name'] );

Дополнительно:

Файл подключения:

Зачем? Тут нет никакой логики связанной с логином.

Что у вас в сессии смотрели?

var_dump($_SESSION); if (isset($_SESSION['logged_user']))...

var_dump($_SESSION); if (isset($_SESSION['logged_user']))...

  • Вот файл, где у меня авторизация
    <?php 	require 'includes/db.php'; ?>  <!DOCTYPE html> <html lang="ru"> <head> 	<meta charset="UTF-8"> 	<meta name="viewport" content="width=device-width, initial-scale=1.0"> 	<title>Вход</title> 	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> 	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css"> 	<link rel="stylesheet" href="assets/css/log.css"> </head> <body> 	<header class="container-fluid col-xxl-12 row-12"> 		<div class="header-line "> 			<h1> <a href="/"><? echo $config['title']; ?></a></h1> 			<form action="get" class="d-xxl-block d-none"> 				<input type="text"> 				<button type="submit" class="btn-search"> 				<i class="bi bi-search"></i> 				</button> 			</form>  			<div class="logins d-xxl-block d-none"> 				<button class="btn"><a href="login.php">Войти</a></button> 			</div> 			<? include "includes/collapse.php"?> 		</div> 	</header> 	<form action="get" class="d-xxl-none d-block"> 		<input type="text" class="input-min"> 		<button type="submit" class="btn-search-min"> 			<i class="bi bi-search"></i> 		</button> 	</form> 	 	  <button class="btn btn-primary menu d-xxl-none d-block" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">     Меню   </button>  <div class="collapse d-xxl-none " id="collapseExample">   <div class="card card-body">     <ul>     	<button class="btn-min btn d-xxl-none d-block">Войти</button>     	<li><a href="#">Спорт</a> </li>     	<li><a href="#">Игры</a></li>     	<li><a href="#">Популярное</a> </li>     	<li><a href="#">LifeStyle</a> </li>     	<li><a href="#">Бизнес</a> </li>     	<li><a href="#">Животные</a> </li>     	<li><a href="#">Искусство</a></li>     	<li><a href="#">Аниме</a> </li>     	<li><a href="#">Мода</a> </li>     	<li><a href="#">Еда и напитки</a></li>     	<li><a href="#">Хобби</a> </li>     	<li><a href="#">Программирование</a> </li>     </ul>   </div> </div> 	<? 		include 'includes/hub.php' 	?> 	<?php           $data = $_POST;     if (isset($data['do_log']) )      {       $errors = array();       $user = R::findOne('users', 'login = ?', array($data['login']));       if ($user) {         if (password_verify($data['password'], $user->password) ) {           $_SESSION['logged_user'] = $user;           echo '<div class="err2">Вы Авторизованы!</div>';         }else         {           $errors[] = '<div class="err">Пароль не верный! </div>';         }        } else        {         $errors[] = '<div class="err">Пользователь с таким логином не найден </div>';       }        if ( ! empty($errors) )          {           echo'<div class="err">'.array_shift($errors).'</div>';         }      } ?> 	<div class="log container"> 		<form action="" method="post"> 			<input type="login" placeholder="Логин" name="login"><br> 			<input type="password" placeholder="Пароль" name="password"><br> 			<button class="btn" type="submit" name="do_log">Войти</button> 			<div class="a container"> 				<a href="sign_up.php?login=&nickname=&password=&do_signup=">Зарегестрироваться</a><br> 		 			</div>  		</form> 	</div>  		<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script> </body> </html>

    <?php require 'includes/db.php'; ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Вход</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css"> <link rel="stylesheet" href="assets/css/log.css"> </head> <body> <header class="container-fluid col-xxl-12 row-12"> <div class="header-line "> <h1> <a href="/"><? echo $config['title']; ?></a></h1> <form action="get" class="d-xxl-block d-none"> <input type="text"> <button type="submit" class="btn-search"> <i class="bi bi-search"></i> </button> </form> <div class="logins d-xxl-block d-none"> <button class="btn"><a href="login.php">Войти</a></button> </div> <? include "includes/collapse.php"?> </div> </header> <form action="get" class="d-xxl-none d-block"> <input type="text" class="input-min"> <button type="submit" class="btn-search-min"> <i class="bi bi-search"></i> </button> </form> <button class="btn btn-primary menu d-xxl-none d-block" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample"> Меню </button> <div class="collapse d-xxl-none " id="collapseExample"> <div class="card card-body"> <ul> <button class="btn-min btn d-xxl-none d-block">Войти</button> <li><a href="#">Спорт</a> </li> <li><a href="#">Игры</a></li> <li><a href="#">Популярное</a> </li> <li><a href="#">LifeStyle</a> </li> <li><a href="#">Бизнес</a> </li> <li><a href="#">Животные</a> </li> <li><a href="#">Искусство</a></li> <li><a href="#">Аниме</a> </li> <li><a href="#">Мода</a> </li> <li><a href="#">Еда и напитки</a></li> <li><a href="#">Хобби</a> </li> <li><a href="#">Программирование</a> </li> </ul> </div> </div> <? include 'includes/hub.php' ?> <?php $data = $_POST; if (isset($data['do_log']) ) { $errors = array(); $user = R::findOne('users', 'login = ?', array($data['login'])); if ($user) { if (password_verify($data['password'], $user->password) ) { $_SESSION['logged_user'] = $user; echo '<div class="err2">Вы Авторизованы!</div>'; }else { $errors[] = '<div class="err">Пароль не верный! </div>'; } } else { $errors[] = '<div class="err">Пользователь с таким логином не найден </div>'; } if ( ! empty($errors) ) { echo'<div class="err">'.array_shift($errors).'</div>'; } } ?> <div class="log container"> <form action="" method="post"> <input type="login" placeholder="Логин" name="login"><br> <input type="password" placeholder="Пароль" name="password"><br> <button class="btn" type="submit" name="do_log">Войти</button> <div class="a container"> <a href="sign_up.php?login=&nickname=&password=&do_signup=">Зарегестрироваться</a><br> </div> </form> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe" crossorigin="anonymous"></script> </body> </html>

  • Кирилл, ок, дальше первой строчки не смотрим, учтем. Что у вас в сессии смотрели?
  • это то, что выдаёт var_dump
    object(__PHP_Incomplete_Class)#1 (12) { ["__PHP_Incomplete_Class_Name"]=> string(19) "RedBeanPHPOODBBean" ["properties":protected]=> array(5) { ["id"]=> string(1) "2" ["login"]=> string(5) "admin" ["nickname"]=> string(27) "Администратор " ["email"]=> string(24) "kirillvegele10@gmail.com" ["password"]=> string(60) "$2y$10$MoL7dMeMk8QeHzO55Fcwlu76M./KN3yIc04VzMjDuwnHoStcH4xlm" } ["__info":protected]=> array(8) { ["type"]=> string(5) "users" ["sys.id"]=> string(2) "id" ["sys.orig"]=> array(5) { ["id"]=> string(1) "2" ["login"]=> string(5) "admin" ["nickname"]=> string(27) "Администратор " ["email"]=> string(24) "kirillvegele10@gmail.com" ["password"]=> string(60) "$2y$10$MoL7dMeMk8QeHzO55Fcwlu76M./KN3yIc04VzMjDuwnHoStcH4xlm" } ["tainted"]=> bool(false) ["changed"]=> bool(false) ["changelist"]=> array(0) { } ["model"]=> NULL ["data.bundle"]=> array(0) { } } ["beanHelper":protected]=> object(__PHP_Incomplete_Class)#2 (1) { ["__PHP_Incomplete_Class_Name"]=> string(44) "RedBeanPHPBeanHelperSimpleFacadeBeanHelper" } ["fetchType":protected]=> NULL ["withSql":protected]=> string(0) "" ["withParams":protected]=> array(0) { } ["aliasName":protected]=> NULL ["via":protected]=> NULL ["noLoad":protected]=> bool(false) ["all":protected]=> bool(false) ["castProperty":protected]=> NULL }
  • Кирилл, я просил сессию, а вы вывалили $_SESSION['logged_user']. Ладно, не суть. Не понятно тогда в чем ваш вопрос, если код работает правильно, пользователь есть - показывает ссылку на логаут.
  • Дело в том, что ссылка "Выйти" должна появляться только тогда, когда пользователь Авторизован, а сейчас она появляется либо всегда, либо вообще не появляется
  • Кирилл, так у вас сессия на месяц, что вы хотели? Один раз авторизировались и месяц логиниться не надо... Что мешает разлогиниться?
  • Имеется ввиду использовать logout.php?
  • Кирилл, если logout.php разлогинивает, то да. Как оно у вас работает знаете только вы...
  • Вообще у меня он только использует unset($_SESSION['logged_user']); Но разлогин не помогает
  • Кирилл,

    Но разлогин не помогает

    То есть после разлогина в сессии остается $_SESSION['logged_user']?

  • ThunderCat, получается да
  • Кирилл, что значит получается? Что пишет вар_дамп?
  • Тоже самое
  • Кирилл, ну так смотрите где ваш разлогин, явно до удаления код не доходит видимо. Ну или у вас выключены варнинги, и вы пытаетесь манипулировать сессией после вывода хтмл, или еще какой-то косяк... Проверяйте ваш разлогиновый код.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Ирина WP Ответ

Проблема с переменной $_SESSION может быть вызвана несколькими причинами. Вот несколько возможных причин и способы их решения:

1. Неправильная настройка сессий:
Убедитесь, что функция session_start() вызывается перед любым выводом на экран в вашем скрипте. Это должно быть самым первым вызовом в вашем скрипте, прежде чем вы начнете устанавливать или получать значения из $_SESSION.

session_start();

session_start();

2. Проблемы с куки:
$_SESSION использует куки для хранения идентификатора сессии. Убедитесь, что у вас включена поддержка куки в браузере пользователя.

3. Неправильные настройки сервера:
Иногда проблема может быть связана с неправильной настройкой сервера. Убедитесь, что у вас правильно настроен PHP.ini файл и сессии включены.

4. Проблемы с правами доступа к файлам сессий:
Убедитесь, что у вас есть правильные разрешения на каталог, в котором хранятся файлы сессий. PHP должен иметь доступ на чтение и запись в этот каталог.

5. Использование несовместимых символов в именах переменных сессии:
Избегайте использования специальных символов, пробелов и тире в именах переменных сессии. Лучше всего использовать только буквы, цифры и символ подчеркивания.

Если после проверки всех вышеперечисленных пунктов проблема с переменной $_SESSION все еще не решена, попробуйте создать минимальный пример кода, который демонстрирует проблему, и обратитесь за помощью на форум или сообщество разработчиков.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно