Автоматически перенаправлять пользователя при сеансе Тайм-аут или бездействует

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

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

Это возможно? и как я могу это сделать? Я использую PHP и javascript.

Изменить: то, что сказал Роб, ниже, именно то, что я ищу … и я спокойно цитирую …

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

Solutions Collecting From Web of "Автоматически перенаправлять пользователя при сеансе Тайм-аут или бездействует"

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

<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 минуты, если сессия все еще действительна.

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

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

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

Затем в 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 на одну из ваших переменных сеанса

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