Тайм-аут сессии в php не работает нормально, Хотите узнать, в чем моя ошибка? - PullRequest
0 голосов
/ 02 апреля 2012

Я использую PHP, чтобы установить тайм-аут сеанса ... Я нашел несколько решений, поэтому я выбрал то, которое я понимаю больше всего:

    $now = time(); // checking the time now when home page starts

    if($now > $_SESSION['expire'])
    {
    session_destroy();
    echo "Your session has expire ! <a href='login.php'>Login Here</a>";
    };

Я также добавил это на своей странице процессора входа в систему

$_SESSION['start'] = time(); // taking now logged in time
$_SESSION['expire'] = $_SESSION['start'] + (30 * 60) ; // ending a session in 30 minutes from the starting time

из Как мне истечь сеанс PHP через 30 минут?

В результате появилось сообщение Your session has expire ! <a href='login.php'>Login Here</a>, но страница все еще была вдомашняя страница вместо того, чтобы возвращаться на страницу входа в систему ... Мне было интересно, если при добавлении header ('Location:login.php'); под строкой эха она вернется на страницу входа в систему ...

Как мне изменить сообщение эхавместо этого вывести всплывающее сообщение и вернуть страницу в login.php?

Спасибо ... Я знаю, что есть ответы в Интернете, но я хочу знать, где моя ошибка, чтобы я мог кое-что узнать здесь ...Преподавание и руководство действительно ценится

1 Ответ

2 голосов
/ 02 апреля 2012

Вы не можете что-то повторить и одновременно перенаправить на домашнюю страницу с вызовом header ().Вызов заголовка требует, чтобы вы ничего не повторяли.Кроме того, для всплывающих окон необходимо, чтобы вы использовали какой-то сценарий на стороне клиента (ECMAScript / JavaScript).Попробуйте вывести этот код при выходе из системы вместо вашего сообщения:

<script>
alert('Your session have expired! Please login again.');
location.href = 'login.php';
</script>

Другое решение - НЕ уничтожать сеанс полностью.Просто сбросьте все переменные.Затем сохраните сообщение об ошибке в сеансе и перенаправьте на страницу входа.Показать сообщение об ошибке на странице входа.Примерно так:

function my_session_destroy() {
  $_SESSION = array();
}

if (/* session expired  ...*/) {
  my_session_destroy();
  $_SESSION['error'] = 'Your session have expired. Please login and try again.';
  header('Location: login.php');
  exit(); //Always call exit() after a header('Location: ...') call!
}

В login.php :

if(isset($_SESSION['error'])) {
  printf('<p class="error">%s</p>', $_SESSION['error']);
  unset($_SESSION['error']);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...