Помните, что после закрытия браузера функция не работает из-за неправильного имени файла cookie в массиве $ _COOKIE

1

Я новичок в PHP. Я попытался реализовать функцию "запомнить меня", как описано ниже.

MysqlSessionHanlder.php → это реализует 6 связанных с сеансом функций, как требуется интерфейсу + все функции для "обычного входа" и логин с функцией "запомнить меня".

login.php → самостоятельно объяснено.

restricted1.php → если Войти успешно, login.php будет перенаправлять на этой странице.

authenticate.php → Эта страница должна быть включена на каждую страницу, которая требует аутентификации перед доступом.

db_connect.php → объясняется сам.

Обычный вход работает хорошо. Я также могу войти в систему, чтобы проверить, что у меня установлен флажок, то есть в обоих случаях я перенаправляюсь на limited1.php. Однако, как только я вхожу в систему, используя функцию "запомнить меня" → закройте браузер → попытайтесь перейти непосредственно к ограничению1.php, меня снова перенаправляют на страницу входа.

Это связано с тем, что limited1.php вызывает first authenticate.php, и этот файл проверяет, является ли пользователь аутентифицированным как обычным, или с помощью автоматического входа в систему существующего cookie.

если нет, это означает, что пользователь пытается получить доступ к закрытой странице без первого входа, который вызывает функцию checkCredentials().

подлинный.php код

require_once __DIR__ . '/db_connect.php';
require_once __DIR__ . '/../../classes/MysqlSessionHandler.php';

$handler = new MysqlSessionHandler($db);
session_set_save_handler($handler);
session_start();
$_SESSION['active'] = time();

if (isset($_SESSION['authenticated']) || isset($_SESSION['auto_login'])) {
   // we're OK
} else {
    $autologin = new MysqlSessionHandler($db);
    $autologin->checkCredentials();
    if (!isset($_SESSION['auto_login'])) {
        header('Location: login.php');
        exit;
    }
}

Однако, когда я закрываю Chrome, снова его открываю, а затем пытаюсь получить доступ непосредственно к ограничению1.php, я перенаправляюсь на login.php.

Во время отладки я обнаружил следующее:

  1. Каждый раз, когда пользователь входит в систему с функцией "запомнить меня", функция, которую я написал с именем persistentlogin(), хранит новый токен в БД +, устанавливает куки файл с именем "auto_login", который включает этот токен, используя функцию setCookie().

  2. Я заметил, что имя файла cookie, показанное в супермассивном массиве $ _COOKIE, является PHPSESSID (имя по умолчанию), хотя я установил имя cookie в своем коде как другое ("auto_login"). Я вижу ОБОИХ файлов cookie: PHPSESSID и cookie auto_login в настройках браузера Chrome, но имя файла cookie "auto_login" НЕ отображается в супермассивном массиве $ _COOKIE. Я думаю, что это моя проблема, потому что checkCredentials() пытается получить доступ к "auto_login_cookie" следующим образом:

    if (isset ($ _ COOKIE [$this-> cookie])) {

    $ cookie - это атрибут, который устанавливается в поле "auto_login".

Почему я не вижу cookie "auto_login", который задается командой setCookie() в массиве $ _COOKIE?

Благодаря,

Qwerty

Теги:
session

1 ответ

0
Лучший ответ

После нескольких дней отладки (!) Я нашел проблему:

Почему мои файлы cookie не установлены?

Оказывается, я установил путь cookie к чему-то другому, кроме '/', что вызвало эту проблему.

Спасибо, в любом случае :-)

+1 для всех людей, которые вкладывают тяжелую работу и никогда не сдаются, пока не достигнут своей цели!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню