Мне нужен тайм-аут сессии для моего сайта.
Мой текущий код работает, когда я добавляю его во все функции на всех моих контроллерах.
Есть ли способ написать это только один раз и включить его во все контроллеры?
-в конфигурационном файле с URL & Проверка сеанса или так?
Мой код, который работает:
if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time()) //4 seconds
{
session_destroy();
echo "<script>
alert('Session Timed Out.');
</script>";
?> <script> window.location ="<?php echo URL;?>"; </script> <?php
}
$_SESSION['timeout'] = time();
Приведенный выше код работает, когда я добавляю это во все функции на всех моих контроллерах.
Но мне нужен код одной страницы.
Вам нужно начать сеанс, прежде чем вы сможете уничтожить его
используйте следующий код в вашем конфигурационном файле
session_start();
if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time()) //4 seconds
{
session_destroy();
echo "<script>
alert('Session Timed Out.');
</script>";
?> <script> window.location ="<?php echo URL;?>"; </script> <?php
}
$_SESSION['timeout'] = time();
и удалите session_start из файлов вашего контроллера. Это должно работать, я проверил это на моем локальном хосте
редактировать
Чтобы исключить страницу входа, используйте следующий код
Предполагая, что URL вашей страницы входа в систему содержит «login», измените $ string в соответствии с URL вашей страницы входа.
$string = "login";
$url = $_SERVER['REQUEST_URI'];
session_start();
if(isset($_SESSION['timeout']) && $_SESSION['timeout'] + 4 < time() && !strpos($url, $string)) //4 seconds
{
session_destroy();
echo "<script>
alert('Session Timed Out.');
</script>";
?> <script> window.location ="<?php echo URL;?>"; </script> <?php
}
$_SESSION['timeout'] = time();
поместите этот код в общий или конфигурационный файл php
<?php
if ($_SESSION['timeout'] + 10 * 60 < time()) {
// session timed out
} else {
// session ok
}
?>
Вы можете установить параметры сеанса с
session_set_cookie_params http://php.net/manual/en/function.session-set-cookie-params.php