2015-05-04 3 views
0

Я очень новичок в веб-разработке. Я потратил некоторое время на то, чтобы ограничить время сеанса в PHP. Я прочитал предложения Stackoverflow, но ни один из них, похоже, не работает для меня (файлы cookie могут быть отредактированы пользователем, AJAX-связь - дополнительная загрузка на сервере и статический PHP), а что касается пассивных вкладок в браузере? Проверка с использованием сеансовых варов).Длительность контроля сеанса PHP

Я имею в виду это:

<script type="text/javascript"> 
    $(document).ready(function() { 
     setTimeout(function() { 
      window.location.href = 'logout.php'; 
     }, 10000); 
    }); 
</script> 

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

+0

Отключение Javascript прост в использовании и предотвратит его запуск. –

+0

Проблема с этим скриптом заключается в том, что браузер перейдет на «logout.php» через 10 секунд каждый раз, когда загружается этот скрипт. Кроме того, при обновлении этой страницы будет возобновлен обратный отсчет 10 секунд. – Aviz

+0

Спасибо, пока это кажется прекрасным для моей цели. Моя система заставит пользователей включить javascript из-за динамического взаимодействия с пользователем и базой данных. И когда пользователь неактивен на 10 секунд (будет увеличен), он выйдет из системы. – Roman

ответ

0
<?php 
function check_user_is_valid() { 
    //Start our session. 
    session_start(); 

    //Expire the session if user is inactive for 30 
    //minutes or more. 
    $expireAfter = 30; 

    //Check to see if our "last action" session 
    //variable has been set. 
    if(isset($_SESSION['last_action'])){ 

     //Figure out how many seconds have passed 
     //since the user was last active. 
     $secondsInactive = time()-$_SESSION['last_action']; 

     //Convert our minutes into seconds. 
     $expireAfterSeconds = $expireAfter * 60; 

     //Check to see if they have been inactive for too long. 
     if($secondsInactive >= $expireAfterSeconds){ 
      //User has been inactive for too long. 
      //Kill their session. 
      session_unset(); 
      session_destroy(); 
     } 
    } 
} 

//Assign the current timestamp as the user's 
//latest activity 
$_SESSION['last_action'] = time(); 

Вызов check_user_is_valid() на каждой странице PHP, чтобы проверить, если пользователь имеет действительный session.It автоматически уничтожить сессию, если страница еще в течение 30 минут.

Обновить значение переменной $ _SESSION ['last_login'] с новым временем на каждой странице, чтобы пользователь получал 30-минутный сеанс для каждой страницы.

+0

Спасибо за ваш ответ, но я думаю, что ваш подход не будет работать для пассивных вкладок в браузере. Некоторые действия должны запускать этот скрипт. – Roman

+0

Почему бы вам не попробовать с помощью метода ajax. Вы можете поместить этот скрипт в ajax-вызов и можете проверить значение сеанса на каждой пассивной вкладке –

Смежные вопросы