Вот код моей страницы входа, где скрипт входа в систему проверяет подлинность пользователя и затем перенаправляет на страницу «Входящие» с использованием функции заголовка.
<?php session_start(); include_once('config.php'); $user=htmlentities(stripslashes($_POST['username'])); $password=htmlentities(stripslashes($_POST['password'])); // Some query processing on database if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){ $_SESSION['loggedIn'] = 'yes'; header("Location:http://xyz/inbox.php?u=$id_user_fetched"); //echo 'Login Successful'; }else{ echo 'Invalid Login'; echo'<br /> <a href="index.html">Click here to try again</a>'; } }else{ echo mysqli_error("Login Credentials Incorrect!"); } ?>
Страница inbox.php выглядит так:
<?php session_start(); echo 'SESSION ='.$_SESSION['loggedIn']; if($_SESSION['loggedIn'] != 'yes'){ echo $message = 'you must log in to see this page.'; //header('location:login.php'); } //REST OF THE CODE ?>
Теперь с указанным выше кодом inbox.php всегда показывает результат: SESSION = вы должны войти в систему, чтобы просмотреть эту страницу. Это означает, что либо переменная сеанса не настроена, либо inbox.php не может получить переменную сеанса. Где я иду не так?
- Убедитесь, что
session_start();
вызывается перед вызовом любых сеансов. Таким образом, безопасная ставка заключалась бы в том, чтобы разместить ее в начале вашей страницы сразу после открытия<?php
перед чем-либо еще. Также убедитесь, что перед открывающим<?php
нет пробелов / вкладок.- После перенаправления
header
завершите текущий скрипт, используяexit();
(Другие также предложилиsession_write_close();
иsession_regenerate_id(true)
, вы также можете попробовать их, но я бы использовалexit();
).- Убедитесь, что файлы cookie включены в браузере, который вы используете, чтобы проверить его.
- Убедитесь, что
register_globals
выключен, вы можете проверить это в файлеphp.ini
а также с помощьюphpinfo()
. Обратитесь к этому, как отключить его.- Убедитесь, что вы не удалили или не очистили сеанс.
- Убедитесь, что ключ в суперглобальном массиве
$_SESSION
не перезаписан нигде.- Убедитесь, что вы перенаправляетесь в тот же домен. Поэтому перенаправление с
www.yourdomain.com
наyourdomain.com
не переносит сессию вперед.- Убедитесь, что расширение файла
.php
(это происходит!).
Сессия PHP потеряна после перенаправления
У меня была такая же проблема на некоторое время, и мне было очень трудно ее понять. Моя проблема заключалась в том, что у меня был сайт, работающий некоторое время, с сессиями, работающими правильно, а потом все внезапно все сломалось.
По-видимому, ваш session_save_path (), для меня это / var / lib / php5 /, должен иметь 777 chmod-разрешений. Я случайно изменил его, полностью сломав сессии.
Чтобы исправить это, просто сделайте sudo chmod -R 777 /var/lib/php5/
(или независимо от вашего session_save_path ()) в linux.
EDIT: Изменение разрешения на 777 не является лучшим решением, если вы знаете пользователя, которым вы запустили свой серверный сервер. Запустите sudo chmod -R 700 /var/lib/php5/
а затем sudo chown -R www-data /var/lib/php5/
чтобы пользователь php имел доступ к папке.
Возможно, если ваш сеанс не работает должным образом, вы можете попробовать session.save_path(path/to/any folder);
как альтернативный путь. Если это сработает, вы можете спросить своего хостинг-провайдера о проблеме с пути по умолчанию.
Просто поговорил с услугой хостинга, это была проблема в их конце. он сказал: «Ваша учетная запись session.save_path не была установлена, поскольку возникла проблема. Я установил ее для вас сейчас».
И это отлично работает после этого 🙂
Если вы используете скрипт подключения, не забудьте использовать start_session();
при подключении тоже возникли проблемы, прежде чем замечать этот вопрос.
Другая важная причина, по которой сеансы не могут работать, воспроизводится с настройками cookie сеанса, например. время жизни cookie сеанса до 0 или других низких значений из-за простой ошибки или другого разработчика по какой-либо причине.
session_set_cookie_params(0)
У меня была аналогичная проблема и с доменом cookie:
ini_set('session.cookie_domain', '.domain.com');
домен был настроен неправильно, поэтому все сеансы были проигнорированы, потому что пользовательский cookie никогда не устанавливался правильно, надеюсь, что это поможет кому-то.
Сегодня я столкнулся с этой проблемой. проблема связана с $ config ['base_url']. Я заметил, что проблема htpp: //www.domain.com и http://example.com была проблемой. исправлять, всегда устанавливайте base_url на http://www.example.com