Как проверить, истек ли сеанс или никогда не был установлен в php - PullRequest
0 голосов
/ 07 января 2019

Как я могу проверить, был ли сеанс когда-либо установлен или был установлен, но истек?

Я использую этот код и хочу сделать эхо, если сессия истекла следующим образом: Session has expired. Please login again

Это мой код:

session_start();
if(!isset($_SESSION['sfmlogin'])){
?>
<a href="login.php">Login again</a>
<?php
exit();
}

Так что для пользователей, которые посещают страницу в первый раз, они не должны получать эхо, как session expired, потому что они никогда не входили в систему раньше.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Информация, которую вы ищете, находится в метаданных сеанса, но не раскрывается через API. Обработчик по умолчанию использует файлы - поэтому, если файл существует, то был сеанс. но вы не должны пытаться обойти обработчик для получения метаданных сеанса! Это было бы очень плохой идеей. На самом деле, звучит так, как будто вы пишете свой собственный обработчик сеанса , который также предоставляет метаданные.

Сессия истекла

Это очень сложное предложение: с обработчиком по умолчанию (оставляя в стороне проблему обхода обработчика для получения метаданных), нет истечения сеанса - есть только сборщик мусора данных сеанса, который не был затронут на некоторое время. В некоторых системах это выполняется пакетным процессом. На некоторых это случайное событие. Таким образом, по сути, и в этом контексте нет никакой разницы между просроченным сеансом и отсутствием сеанса с точки зрения сервера.

Вы можете сделать вывод из файлов cookie, если браузер считает, что он должен иметь сеанс:

session_start();
if ($_COOKIE(session_name() && !count($_SESSION)) {
    print "session has expired";
    exit;
} elsif (!$_COOKIE(session_name()) {
    print "You need to login first";
    exit;
} else {
    print "welcome back....";
    ....

... но убедитесь, что вы добавили что-то в сеанс, когда пользователь входит в систему.

0 голосов
/ 07 января 2019

Как насчет выполнения логической проверки для session_status ()? Если он возвращает true, то сеанс активен, в противном случае он возвращает уведомление «Session Expired». http://php.net/manual/en/function.session-status.php

Редактировать : Вам потребуется проверять session_status () только после того, как пользователь вошел в систему. Если этого не произошло, то сеанс не был запущен, поэтому $ _SESSION уже будет иметь значение false и сеанс уведомление об истечении срока не будет возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...