Тайм-аут сеанса PHP
Я создаю сеанс, когда пользователь входит в систему так:
$_SESSION['id'] = $id;
Как я могу указать тайм-аут на этом сеансе за X минут, а затем выполнить функцию или перенаправление страницы, когда она достигнет X минут?
EDIT: Я забыл упомянуть, что мне нужен сеанс таймаута из-за бездействия.
Ответы
Ответ 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
}
?>