2013-11-01 4 views
0

Я использую этот код, чтобы закончить сеанс после 10 секунд бездействия:Уничтожая сеанс PHP

ini_set('session.gc_maxlifetime', 10); 
session_start(); 

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 10)) { 
    session_unset(); 
    session_destroy(); 
} 
$_SESSION['LAST_ACTIVITY'] = time(); 

Это работает только тогда, когда я обновить страницу после 10 секунд бездействия. Если я не обновляю страницу или не закрываю браузер, сеанс никогда не будет уничтожен. Может ли кто-нибудь помочь мне, как это исправить?

+2

Вам нужно будет подать запрос AJAX каждые 10 секунд, чтобы проверить это. – fire

+0

каждые 8 ​​часов. Вы можете опоздать на время сеанса обновления. –

+0

@fire Вам нужно будет установить тайм-аут после каждого действия (активности) в javascript, очистить его, когда пользователь что-то сделает, и только запустить запрос ajax, когда таймер закончится, и вы хотите уничтожить сеанс. – jeroen

ответ

-1

Через 10 секунд, вам нужно уничтожить сессию, а затем перенаправить их, как это:

session_destroy(); 
header("Location: logoutpage.php"); 

Это «обновить» страницу и уничтожить сессию.

Извините, что я не уточняю, но вам нужен звонок ajax, вот аналогичный вопрос. Я отправлю ajax через мгновение. Сожалею.

Unset session after some time

вот Аякс ... установить тайм-аут на указанное вами время. Опять же, жаль, что не уточнил.

function refresh() { 
    $.ajax({ 
     type: 'GET', // can be POST or GET 
     url: 'page.php' // php script to call 
    // when the server responds 
    }).done(function(response) { 
     console.log(response); 
     // call your function automatically 
     setTimeout(refresh, 5000); 
    }); 
} 

В основном, функция refresh дозвонились каждые 5000 миллисекунд.

0

Спасибо за советы.

Теперь я использую также этот код javascript для обновления после 10 секунд неактивности, и он работает хорошо. Но когда я закрываю сеанс браузера, все равно не будет уничтожен.

<body onmousemove = "canceltimer()"; onclick = "canceltimer()"> 
<script type="text/javascript"> 
    var tim = 0; 
    function reload() { 
     tim = setTimeout("location.reload(true);",10000); 
    } 

    function canceltimer() { 
     window.clearTimeout(tim); 
     reload(); 
    } 
</script> 
Смежные вопросы