我的网站需要一个会话超时。
当我将当前代码添加到所有控制器上的所有函数中时,它就能工作。
有没有一种方法可以只写一次并将其包含在所有控制器中?
-在配置文件中,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",则根据您的登录页url 修改$string
$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_okie_paramshttp://php.net/manual/en/function.session-set-cookie-params.php