Автоматически перенаправлять пользователя, когда сессия истекает или простаивает - PullRequest
6 голосов
/ 16 июня 2009

Я хочу, чтобы таймер запускался каждые 3 минуты на странице (javascript), чтобы определить, истекло ли время сеанса php ($ _SESSION) ... и, если это так, перенаправить их автоматически.

Хорошим примером может быть то, что пользователь входит в систему и поднимается по лестнице, и никогда не возвращается обратно ... Я хочу, чтобы javascript выводил их с помощью простого перенаправления ...

Возможно ли это? и как бы я сделал такую ​​вещь? Я использую PHP и JavaScript.

Edit: То, что Роб сказал ниже, это именно то, что я ищу ... и я смело "цитирую" ...

Я подозреваю, что Майк просит, чтобы по истечении времени сеанса браузер получил указание отойти от текущей страницы. Некоторые банки делают это после периода бездействия, например. - Роб Кеннеди 5 часов назад

Ответы [ 3 ]

11 голосов
/ 16 июня 2009

Вы можете использовать простое мета-обновление :

<meta http-equiv="refresh" content="180;url=http://example.com/logout" />

Или вы реализуете таймаут с PHP:

session_start();
if (isset($_SESSION['LAST_REQUEST_TIME'])) {
    if (time() - $_SESSION['LAST_REQUEST_TIME'] > 180) {
        // session timed out, last request is longer than 3 minutes ago
        $_SESSION = array();
        session_destroy();
    }
}
$_SESSION['LAST_REQUEST_TIME'] = time();

Тогда вам не нужно проверять каждые 3 минуты, если сеанс все еще действителен.

1 голос
/ 16 июня 2009

Новое и улучшенное решение

Как указал г-н Кеннеди, мое оригинальное решение (ниже) не работает. так вот способ сделать это.

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

Тогда в checkaccess.php

if ( time-last_access > max_inactivity_time ) {
     return array('access' => '0');
}
else {
     return array('access' => '0');
}

Вызовите checkaccess.php в таймере JavaScript (ниже) и выйдите из системы соответственно

Это также позволяет использовать функцию «авторизованные пользователи»

спасибо, мистер Кеннеди


Оригинальный нерабочий раствор

Создать страницу php, которая возвращает 1 или 0 в зависимости от действительности текущего сеанса пользователя.

Затем на ваших страницах, для которых вы хотите установить тайм-аут, добавьте это в заголовок (вам нужен jquery)

setInterval(function(){
   var url = UrL_OF_SESSION_CHECKING_PAGE;
      $.getJSON( url,
         function( data ) {
            if (data.access=='0') {
               window.location = LOGIN_PAGE;
            }
         }
      );
}, 180000);

Каждые 180 секунд (3 минуты) он запрашивает страницу php и получает достоверность сеанса. Если он недействителен, он перенаправляет на страницу входа

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

Вот хорошая страница о таймерах javscript http://ejohn.org/blog/how-javascript-timers-work/

Страница проверки простого сеанса

session_start();
die(
    json_encode(
        isset( $_SESSION['VARIABLE'] ) ? array( 'access' => '1') : array( 'access' => '0' )
    )
);

замените VARIABLE на одну из переменных сеанса

0 голосов
/ 17 июня 2009

Если вы хотите, чтобы это произошло до того, как страница будет обновлена, вам понадобятся периодические вызовы ajax. Вы можете использовать jQuery Heartbeat , чтобы совершать вызовы каждые 3 минуты, и использовать один из методов PHP, уже предоставленных другими пользователями, для проверки сеанса

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