Вопрос по php, session – php, как определить, является ли идентификатор сессии мертвым или живым? [Дубликат]

4

Possible Duplicate:
How do I expire a PHP session after 30 minutes?

Как определить, является ли идентификатор сеанса мертвым или живым? Предположим, кто-то вошел в систему - новый сеанс создан, и я сохраняю идентификатор сеанса. Если он входит в другой браузер, я могу определить, что он вошел дважды. Но как определить, вышел ли он из системы?

Да, сессии в конечном итоге истекают. Посмотрите свой php.ini или сделайте phpinfo (), и вы получите всю эту информацию. Brian
У вас естьlog out кнопка где-то на вашем сайте? Darin Dimitrov
да. Но он может просто закрыть свой браузер, или сеанс умирает с таймаутом John Smith

Ваш Ответ

5   ответов
2

реключиться на сохранение сеанса в БД, тогда вы сможете проверить сеансы против пользователей (если вы настроите его таким образом).

3

вы должны установить переменные сеанса, чтобы сказать, что они вошли в систему.

Если пользователь выходит из системы, вы должны использоватьsession_destroy() закончить сессию.

Таким образом, переменная уничтожается, поэтому, если вы проверите переменные сеанса, она не будет истинной. Я лично пользуюсь$_SESSION['isLoggedIn'] = TRUE.

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

4

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

РЕДАКТИРОВАТЬ:

Извините, я неправильно прочитал ваш вопрос. То, что вы хотите сделать, это установить тайм-аут сеанса, так что, если тайм-аут достигнут, вы предполагаете, что сеанс мертв и истекает его. На каждом запросе страницы вы продлеваете срок действия, чтобы он действовал. Если они входят в систему из другого браузера, вы можете предположить, что сеанс в старом браузере устарел, и сразу же прекратить его или позволить ему истечь с истечением времени ожидания.

Затем вы можете проверить время ожидания сеанса при загрузке страницы или запустить скрипт cron, который будет запускаться через базу данных сеансов и истечет срок действия всех старых сеансов.

Да, это хороший подход.
Что произойдет, если он закроет окно браузера, не выйдя должным образом?
@DarinDimitrov Вы обнаружите новый логин, связанный с его учетной записью в новом браузере, затем перепроверьте его с таблицей пользователей / сеансов и истечет срок его старого сеанса.
@Computer & quot; найдите старый идентификатор сессии [& # x2026;] и истекайте его срок действия & quot; Зачем ему это делать? Это исключило бы возможность входа в систему несколькими браузерами одновременно.
@feeela Извините, я прочитал его вопрос, так как хочу, чтобы только 1 сеанс был активным.
3

когда пользователь входит в систему и задайте для переменной значение true. Вы также можете сохранить некоторые данные в переменной сессии, если вам нужно. После того, как пользователь нажмет на выход из системы, установите переменную сеанса равной false. Код может быть следующим:

 function Login()
    {
        if(!isset($_SESSION)){ session_start(); }
        if(!$this->CheckLoginInDB($email,$password))
        {
            return false;
        }

        $_SESSION[$this->GetLoginSessionVar()] = $email;

        return true;
    }

function GetLoginSessionVar()
    {
        $retvar = md5($this->rand_key);
        $retvar = 'usr_'.substr($retvar,0,10);
        return $retvar;
    }

    function LogOut()
        {
            session_start();

            $sessionvar = $this->GetLoginSessionVar();

            $_SESSION[$sessionvar]=NULL;

            unset($_SESSION[$sessionvar]);
        }

Это один простой способ сделать это. Если вы хотите перерыв. Вы можете использовать время начала для своей переменной $ _SESSION [], а затем установить время ожидания. Проверьте наличие активности до этого времени, а затем выйдите из системы следующим образом:

function LogOut(){
session_start();
// set timeout period. This will be in seconds.
$inactive = 1000;
// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['start'];
    if($session_life > $inactive)
        { session_destroy(); header("Location: logoutpage.php"); }
}
$_SESSION['timeout'] = time();

}

Там могут быть более лучшие способы сделать это. Я ищу лучший способ сделать это сам. Надеюсь, поможет.

Поэтому, если он закроет свой браузер, он все равно выйдет из системы после бездействия. Но если вы хотите выйти из системы после закрытия браузера, проверьтеini.session.cookie-время жизни

3

persistency layerобычно пользовательская таблица / коллекция на сервере базы данных.

Сеансы создаются с использованием этих сохраненных данных во время входа в систему, и сохраненные данные каким-то образом сериализуются в$_SESSION суперглобальный.

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

Не существует жесткого и быстрого правила, что это должно выполняться в БД, оно просто лучше масштабируется. В небольшом тестовом случае вы также можете легко сохранить файлы подкачки.

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

Похожие вопросы