Step1 建立一个基类, 如/application/index/controller/IndexBase.php, 示例代码如下
<?php
namespace app\index\controller;
use think\Controller;
class IndexBase extends Controller
{
// 初始化方法
protected function _initialize()
{
$loginTime = 60 * 30; //设定登录持续时间为30分钟
if (session('user')) {
//已登录状态下, 检测session中存储的上次操作时间;
$lastAction = session('user')['last-action'];
//计算当前时间与上次操作的时间差last, 其单位是秒
$last = time() - $lastAction;
// echo $last;
if ($last > $loginTime) {
// 超时就清除session, 然后跳转至登录页
session('user', null);
$this->redirect(url('index/userx/login'));
} else {
//如果没有超时, 就刷新最后操作时间
session('user')['last-action'] = time();
}
}
}
}
Step2 在要验证登录时间的页面, 如首页; 首页的控制器/appilication/index/controller/Index.php, 它就不在继承Controller父类, 而是继承IndexBase这个基类, 示例代码如下
<?php
namespace app\index\controller;
use app\index\controller\IndexBase;
class Index extends IndexBase
{
//页面: 全站首页
public function index()
{
return $this->fetch();
}
}
这个意思是说, 对所有如此操作的控制器, 它其中的每一个方法, 在运行前, 都要先运行IndexBase中的_initialize()方法
Step3 在登录时, 也记录last-action的时间, 所以登录方法中的Session操作是这样的
session('user', $res);
session('user')['last-action'] = time();//记录登录时间
这样, 在所有进行了像Step2那样操作的控制器, 就实现了检测时间, 是否退出.