Как (если возможно) установить и сбросить переменные сеанса / остановить перезапись cookie сеанса? - PullRequest
0 голосов
/ 04 ноября 2011

Для фона вот мой сценарий:

Я создаю платформу с собственным хостингом для определенной ниши, и частью этой платформы является процесс входа в систему, который при проверке устанавливает сеанс для пользователя. При каждой загрузке страницы администрирования сеанс запускается, и переменная $_SESSION['key'] проверяется, чтобы убедиться, что это правда.

Если значение равно false, пользователь перенаправляется на страницу входа в систему с ошибкой, сообщающей ему о необходимости повторного входа в систему.

Проблема заключается в том, что это зависит от того, установлен файл cookie сеанса или не установлен, в том смысле, что когда срок действия файла cookie сеанса истекает, а сеанс начинается с session_start(), чтобы проверить $_SESSION['key'], следовательно, создается новый файл cookie сеанса значения по умолчанию (я использую session_set_cookie_params() для изменения пути, времени ожидания и т. д.), что делает невозможным повторный вход в систему, поскольку сеансовые куки не перезаписывают то, что я вижу.

Чтобы это исправить, я подумал об использовании чего-то вроде session_set_cookie_params(5, ..) перед session_start() при проверке $_SESSION['key'], что создаст 5-секундный сеансовый cookie, поэтому можно будет создать новый при повторной регистрации в, но я не уверен, будет ли это работать - и я также уверен, что должен быть более эффективный способ установки / сброса переменной сеанса?

Вот мой код:

Начать сеанс, если подтвержден логин

if($validated){
    session_set_cookie_params(1800, "/inst", $server_name['home']); 
    session_name("_inst");
    session_start();
    $_SESSION['key'] = true;
}

Проверьте, верно ли значение $ _SESSION ['key']

session_name("_inst");
session_start();

if(!$_SESSION['key']) {
    header('Location: ' . $server['home'] . '/login/?error=1');
}

Любые ответы или советы будут хорошими, и, пожалуйста, спросите, если вам нужно что-то разъяснить!

1 Ответ

2 голосов
/ 04 ноября 2011

Просто введите session_start () на всех страницах.Это безоговорочно создаст для вас сеанс, после чего вы можете проверить наличие / отсутствие ключа:

<?php

session_start();

if (!isset($_SESSSION['key'])) { // never logged in, or were logged in and got logged out
   ... redirect to login ...
   exit();
}

if ($_SESSION['key'] != 'expected value') { // logged in, but no longer a valid login.
   ... redirect to login ...
   exit();
}

Вам не нужно вообще связываться с настройками cookie сеанса.Оставьте их по умолчанию и просто проверьте соответствующие ключи.если их там нет, то пользователь не вошел в систему и должен быть перенаправлен.

Если срок их сеанса истек, а PHP очистил файл сеанса, то он был эффективно вышел из системы, даже если онииметь ключ сеанса, действующий на момент времени, и должен быть перенаправлен для повторного входа в систему.

...