У меня есть сайт samplewebsite.com, а функция входа в систему и сеанс работают нормально.
Теперь я создаю новую страницу с участием сеанса, запущенного на странице входа в систему, которая находится на samplewebsite.com/sample.php. На данный момент файл содержит только следующий код.
session_start();
if(isset($_SESSION)){
print_r($_SESSION);
}
Это выводит пустой массив. Когда я проверяю инструменты разработчика Chrome, вкладка "Куки" включает PHPSESSID, который, как я полагаю, означает, что сеанс действительно запущен.
Я ужасно расстроен, почему на моем сайте samplewebsite.com я вошел в систему, и сессия правильно подобрана, а на samplewebsite.com/sample.php я не могу получить сеанс, в котором я нуждаюсь вообще.
Есть ли какая-то ошибка в конфигурации сеанса сервера? Что могло быть неправильным или каковы возможные причины этой проблемы?
РЕДАКТИРОВАТЬ:
Это фрагмент моего файла входа.
include "db.php";
if (!isset($_SESSION)){session_start(); }
if (isset($_SESSION['admin'])){header("Location: /"); }
if(isset($_POST['submit'])){
$query = mysql_query("Select * from users where 'username'='".mysql_real_escape_string($_POST['username'])."' and 'password'='".md5(mysql_real_escape_string($_POST['password']))."'");
if(mysql_num_rows($query) > 0 ){
$row = mysql_fetch_assoc($query);
$_SESSION['admin'] = $row['ID'];
header("Location: /"); exit();
}
else{
echo "<script>alert('Account Invalid')</script>";
}
}
Сеанс был инициализирован, потому что если бы я не был перенаправлен на страницу входа (из-за функции перенаправления на index.php, где если $ _SESSION ['admin'] не задано, перенаправляйтесь на логин). Это проверяется вручную, удалив сеанс на инструменте chrome dev, и обновление страницы приведет меня к странице входа.
Таким образом, я вошел в систему, и я вижу, что мой сеанс работает на samplewebsite.com, но на моей другой вкладке в samplewebsite.com/sample.php я не могу повторить $ _SESSION ['admin'], когда я пытаюсь
echo $_SESSION['admin'];
Хотя это может и не быть подходящим ответом, у меня теперь есть идея, почему я не смог подобрать сеанс.
Когда я смотрел на вкладке Cookies на hrome dev. Я заметил, что сеансы хранятся в разных доменах. Возможно, потому, что я вошел в систему
http://www.samplewebsite.com/login.php
где сеанс хранился в домене с именем
www.samplewebsite.com
Пока я пытался получить доступ к сеансу из
samplewebsite.com/sample.php
Чьи сеансы проводились в домене
samplewebsite.com
Я полностью упускал из виду URL-адреса, которые были глупой ошибкой, я полностью ослеплен различием между двумя доменами и, возможно, просто не имел общих знаний или тому подобного.
Спасибо за ваши быстрые ответы.
Это не верно:
if (!isset($_SESSION)){session_start(); }
просто
session_start();
на КАЖДОЙ странице в начале
По умолчанию массив SESSION пуст, вам нужно инициализировать переменные.
например:
session_start();
$_SESSION['test'] = 'my test';
if(isset($_SESSION)){
print_r($_SESSION);
}
Затем вы увидите вывод "мой тест".
Не забудьте запустить сеанс на каждой странице php, чтобы иметь доступ к вашим vars.