Почему не работает $_SESSION?
Я хочу сделать так, чтобы кнопка "Выйти из аккаунта" появлялась тогда, когда человек вошёл в аккаунт. В остальное врем этой кнопки быть не должно. Сейчас у меня всегда весит кнопка выйти.
<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, получается да
- Кирилл, что значит получается? Что пишет вар_дамп?
- Тоже самое
- Кирилл, ну так смотрите где ваш разлогин, явно до удаления код не доходит видимо. Ну или у вас выключены варнинги, и вы пытаетесь манипулировать сессией после вывода хтмл, или еще какой-то косяк... Проверяйте ваш разлогиновый код.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с переменной $_SESSION может быть вызвана несколькими причинами. Вот несколько возможных причин и способы их решения:
1. Неправильная настройка сессий:
Убедитесь, что функция session_start() вызывается перед любым выводом на экран в вашем скрипте. Это должно быть самым первым вызовом в вашем скрипте, прежде чем вы начнете устанавливать или получать значения из $_SESSION.
session_start();
2. Проблемы с куки:
$_SESSION использует куки для хранения идентификатора сессии. Убедитесь, что у вас включена поддержка куки в браузере пользователя.
3. Неправильные настройки сервера:
Иногда проблема может быть связана с неправильной настройкой сервера. Убедитесь, что у вас правильно настроен PHP.ini файл и сессии включены.
4. Проблемы с правами доступа к файлам сессий:
Убедитесь, что у вас есть правильные разрешения на каталог, в котором хранятся файлы сессий. PHP должен иметь доступ на чтение и запись в этот каталог.
5. Использование несовместимых символов в именах переменных сессии:
Избегайте использования специальных символов, пробелов и тире в именах переменных сессии. Лучше всего использовать только буквы, цифры и символ подчеркивания.
Если после проверки всех вышеперечисленных пунктов проблема с переменной $_SESSION все еще не решена, попробуйте создать минимальный пример кода, который демонстрирует проблему, и обратитесь за помощью на форум или сообщество разработчиков.