Подтвердить что ты не робот

Тайм-аут сеанса PHP

Я создаю сеанс, когда пользователь входит в систему так:

$_SESSION['id'] = $id;

Как я могу указать тайм-аут на этом сеансе за X минут, а затем выполнить функцию или перенаправление страницы, когда она достигнет X минут?

EDIT: Я забыл упомянуть, что мне нужен сеанс таймаута из-за бездействия.

4b9b3361

Ответ 1

сначала сохраните последний раз, когда пользователь сделал запрос

<?php
  $_SESSION['timeout'] = time();
?>

в следующем запросе, проверьте, как давно они сделали свой предыдущий запрос (10 минут в этом примере)

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>

Ответ 2

Когда сеанс истекает, данные больше не присутствуют, поэтому что-то вроде

if (!isset($_SESSION['id'])) {
    header("Location: destination.php");
    exit;
}

будет перенаправляться всякий раз, когда сеанс больше не активен.

Вы можете установить, сколько времени поддерживается cookie сеанса, используя session.cookie_lifetime

ini_set("session.cookie_lifetime","3600"); //an hour

РЕДАКТИРОВАТЬ: Если вы синхронизируете сеансы из-за проблем с безопасностью (вместо удобства), используйте принятый ответ, как показывают приведенные ниже комментарии, это контролируется клиентом и, следовательно, не защищается. Я никогда не думал об этом как о мерах безопасности.

Ответ 3

Просто проверьте сначала, что сеанс еще не создан, и если он не создан. Здесь я устанавливаю его только на 1 минуту.

<?php 
   if(!isset($_SESSION["timeout"])){
     $_SESSION['timeout'] = time();
   };
   $st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>

<?php 
  if(time() < $st){
    echo 'Session will last 1 minute';
  }
?>

Ответ 4

<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>

В заголовке каждой страницы работает для меня во время тестирования сайта (сайт еще не выпущен). На странице HTML она заканчивается сеансом и просто информирует пользователя о необходимости повторного входа в систему. Это кажется более простым способом, чем игра с логикой PHP. Мне понравились бы некоторые комментарии к этой идее. Любые ловушки, которые я не видел в нем?

Ответ 5

<?php 
session_start();

if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}

else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>

Ответ 6

Решение Byterbit проблематично, потому что:

  • с истечением срока действия клиентского файла cookie на стороне сервера является проблемой безопасности.
  • если тайм-аут истечения срока действия, установленный на стороне сервера, меньше таймаута, установленного на стороне клиента, страница не отражает фактическое состояние файла cookie.
  • даже если для удобства в стадии разработки это проблема, потому что она не будет отражать правильное поведение (по времени) на этапе выпуска.

для файлов cookie, установка истечения срока действия через session.cookie_lifetime - правильное решение с точки зрения дизайна и безопасности! для завершения сеанса вы можете использовать session.gc_maxlifetime.

истечение срока действия файлов cookie путем вызова session_destroy может привести к непредсказуемым результатам, поскольку они, возможно, уже истекли.

внесение изменений в php.ini также является допустимым решением, но делает глобальное истечение для всего домена, который может не быть тем, что вы действительно хотите - некоторые страницы могут предпочесть сохранить некоторые файлы cookie больше, чем другие.

Ответ 7

    session_cache_expire( 20 );
    session_start(); // NEVER FORGET TO START THE SESSION!!!
    $inactive = 1200; //20 minutes *60
    if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
    header("Location: user_logout.php");
}
    }
    $_SESSION['start'] = time();

    if($_SESSION['valid_user'] != true){
    header('Location: ../....php');
    }else{  

источник: http://www.daniweb.com/web-development/php/threads/124500

Ответ 8

<?php
session_start();
if($_SESSION['login'] != 'ok')
    header('location: /dashboard.php?login=0');

if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
    // session inactive more than 10 min
    header('location: /logout.php?timeout=1');
}

$_SESSION['last-activity'] = time(); // update last activity time stamp

if(time() - $_SESSION['created'] > 600) {
    // session started more than 10 min ago
    session_regenerate_id(true); // change session id and invalidate old session
    $_SESSION['created'] = time(); // update creation time
}
?>