如何在所有控制器中包含会话超时?
我需要一个会话超时为我的网站。如何在所有控制器中包含会话超时?
我当前的代码在我将其添加到所有控制器的所有功能中时起作用。
有没有办法只写一次,并将其包含到所有控制器?
-in配置文件与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中包含“登录”,修改$字符串,按您的登录页面的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
}
?>
我试过这个阿伦。此代码仅在我将其添加到所有控制器的所有功能中时才起作用。这在配置中不起作用。 – 2015-02-07 07:05:21
@pradeep你使用任何框架? – Arun 2015-02-07 07:06:48
如上所述简单的MVC – 2015-02-07 07:07:48
您可以设置会话参数与
session_set_cookie_paramshttp://php.net/manual/en/function.session-set-cookie-params.php
不行不行Ehwas – 2015-02-06 10:59:24
如何从这种情况中排除我的登录页面? – 2015-02-09 12:48:20
修改了现有的代码来ecluse登录页面 – 2015-02-09 13:05:36
它是否适合你? – 2015-02-09 13:31:56