У меня есть простая система входа в систему, использующая сеансы PHP, но совсем недавно кажется, что если вы посещаете страницы не в определенном каталоге (/ login /), вы всегда будете отмечены как не вошедшие в систему, даже когда вы это делаете. Кажется, что мои данные сеанса теряются, когда я меняю каталоги (скажем, на / login / user /).
Я не думаю, что сам коснулся кода с тех пор, как возникла проблема. Мог ли мой веб-хост сделать что-то для моей установки PHP, который мог бы удалить данные сеанса, и есть ли обходной путь?
EDIT:
Внутри каждого файла, требующего авторизации, он загружает файл loginfunctions.php, который вызывает session_start () и проверяет вход в систему. Файлы, которые работают в / login и я копирую и вставляю в / login / user, перестают работать, хотя я обновляю все соответствующие пути и ссылки.
EDIT2:
Хорошо, немного кода.
На реальных страницах, которые дают мне ошибку, это аутентификация. код:
require_once("../../../includes/loginFunctions.php");
$login = new login;
$login->checkLogin(0);
Внутри loginFunctions.php есть это:
class login{
function checkLogin($requiredAccess){
session_start();
if($_SESSION['accesslevel'] < $requiredAccess || $_SESSION['logged_in'] != TRUE){
die("You don't have access to this area. If you should have access, please log in again. <a href='/login/'>Login</a>");
}
if (isset($_SESSION['HTTP_USER_AGENT'])){
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){
session_destroy();
die("Bad session. Please log in again. <a href='/login/'>Login</a> ");
}
} else {
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}
if (!isset($_SESSION['initiated'])){
session_regenerate_id();
$_SESSION['initiated'] = true;
}
}
}
Переменная $ requiredAccess - это уровень доступа, необходимый для доступа к этой странице, поэтому, если у вас есть уровень доступа 3 в базе данных, вы можете просматривать страницы уровня 0, 1, 2 и 3. Это указывается, когда функция вызывается на главной странице, и сравнивается с уровнем доступа текущего пользователя, который определен в $ _SESSIONS при входе в систему.
Я получаю сообщение об ошибке «У вас нет доступа к этой области и т. Д.», Когда я пытаюсь получить доступ к этим страницам. Если я пытаюсь напечатать переменные $ _SESSION, ничего не отображается; они кажутся пустыми. Однако , если я перемещаю файл в папку / login / (на один уровень выше) и обновляю ссылки, они работают отлично, и все переменные печатаются нормально. Это заставляет меня думать, что код - это не та часть, которая не работает, а некоторые настройки в моей установке PHP, которая была изменена без моего уведомления.