2013-08-17 2 views
1

времени В настоящее время я отслеживание, проведенного пользователем на сайте с использованием PHP код, упомянутым ниже:PHP автоматического выход из системы после 10 минут бездействия

if (!isset($_SESSION[timeset1])) 
{ 
$one_val = time(); 
$_SESSION[timeset_dummy]= $one_val; 
$two_val = time()+1; 
    $_SESSION[units_all] = array 
    (
    "year" => 29030400, 
    "month" => 2419200, 
    "week" => 604800, 
    "day" => 86400, 
    "hr" => 3600, 
    "min" => 60, 
    "sec" => 1 
); 
} 
else 
{ 
$two_val = time(); 
} 
$diff = abs($two_val - $_SESSION[timeset_dummy]); 

foreach($_SESSION[units_all] as $unit => $mult) 
    if($diff >= $mult) 
    { 
    $output .= " ".intval($diff/$mult)." ".$unit.((intval($diff/$mult) == 1) ? ("") : ("s")); 
    $diff -= intval($diff/$mult) * $mult; 
    } 

Я хочу дать всплывающие пользователям через 8 минут бездействия этот сеанс истечет через следующие 2 минуты. Можете ли вы предложить, как я могу показать всплывающее окно (желательно без использования Javascript, хорошо иметь с CSS3 & HTML5). В Pop-Up появится предупреждающее сообщение «Вы хотите продолжить» и одну кнопку «Да», если кнопка не будет нажата в течение 2 минут, автоматически будет выполнен сценарий выхода из системы (PHP).

Любые указатели на реализацию этой логики.

+1

Это может помочь http://www.ehow.com/how_8788319_make-popup-window-javascript.html –

ответ

6

Я нашел плагин jQuery, который выглядит так, что это упростит вашу жизнь. Он называется jquery-idleTimeout.

Плагин имеет несколько элементов конфигурации, так что вы можете настроить его для собственных нужд ...

  • пассивность: 1200000 // 20 минуту по умолчанию (как долго, прежде чем показывать уведомление)
  • sessionAlive: 300000, // 5 минут по умолчанию, как часто нажимать live_url, мы используем для наших интерфейсов ajax *, где страница не меняется очень часто. Это помогает предотвратить появление экрана выхода из вашего приложения в обратных вызовах ajax. Если вы установите для него значение false, оно не будет отправлено.
  • alive_url: '/ путь/к/ваш/IMHere/URL', // отправить живой пинг на этот адрес
  • REDIRECT_URL: '/ js_sandbox /', // Куда пойти, когда выйти из
  • click_reset: true, // Сброс таймаута на кликах (для интерфейса ajax) - сбрасывает таймер sessionAlive, поэтому мы не нажимаем на ваше приложение с помощью live_url, если мы просто сделали ajax-вызов по другой причине.
  • logout_url: выход из системы «/js_sandbox/timedLogout/index.html» // перед переадресацией (URL, так что вы можете полностью уничтожить сеанс перед перенаправлением войти в экран)

Вот ссылка на страницу GitHub для скачать библиотеку.

https://github.com/philpalmieri/jquery-idleTimeout

Редактировать

Что-то я заметил, глядя на исходный код, они используют Jquery-UI в качестве таблицы стилей, чтобы она выглядела, как это делает в демо.

+0

Спасибо за информацию. Этот плагин очень приятный. Он будет работать во всех браузерах? –

4

Насколько я знаю, вы не можете достичь того, что ищете без javascript. Браузеру нужен javascript, чтобы узнать, когда открыть всплывающее окно. Вы можете использовать любые средства, которые вы хотите проверить для тайм-аута, либо базовый window.setTimeout, либо более сложную библиотеку (например, в ответе tehAon).

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

$_SESSION['last_activity'] = time(); 

function check_if_logged_in() { 
    if(time() - $_SESSION['last_activity'] > 600) { // 10 minutes but you could use 480 for 8 minutes 
     // Do redirect or take other action here 
    } 
} 
0
if(time() - $_SESSION['timestamp'] > 900) { //15 minute subtract new timestamp from the old one 
     $_SESSION['logged_in'] = false; 
     session_destroy(); 
     header("Location: " . index.php); //redirect to index.php 
     exit; 
    } else { 
     $_SESSION['timestamp'] = time(); //set new timestamp 
    } 
0

Это довольно легко с переменной PHP сессии.

набор $ _SESSION переменной с отметкой времени и проверьте с временем действия

<?php 
session_start(); 
if(time()-$_SESSION['time']>600) 
unset($_SESSION['time']); 
else 
$_SESSION['time']=time();//updating with latest timestamp 
?> 
Смежные вопросы