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

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

$_SESSION['id'] = $id; 

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

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

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

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

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

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

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

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

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

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

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

EDIT: Если вы проводите сеансы синхронизации из-за проблем с безопасностью (вместо удобства), используйте принятый ответ, как видно из приведенных ниже комментариев, это контролируется клиентом и, следовательно, не защищается. Я никогда не думал об этом как о мерах безопасности.

Просто проверьте сначала, что сеанс еще не создан, и если его не создать. Здесь я устанавливаю его только на 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'; } ?> - <?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'; } ?> 
 <script type="text/javascript"> window.setTimeout("location=('timeout_session.htm');",900000); </script> 

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

 <?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"; } ?> 

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

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

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

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

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

  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

 <?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 } ?>