大概的原理是:登录插入表中token信息,每次操作更改token表中的时间,判断失效是根据表中时间判断。下面展示其中一部分代码:
public function adminCheck($userId, $token)
{
if (empty($userId) || empty($token))
{
return new Result(false, false, '没有权限');
}
// 检验token
$checkRes = $this->checkToken($userId, $token);
if (!$checkRes->Success)
{
//清除网站登录的一些信息(代码就不用放出来了)
$this->clearAdminSessions();
return new Result(false, false, $checkRes->Message);
}
return new Result(true, true, '');
}
private function checkToken($userId, $token)
{
if (empty($token) || empty($userId))
{
return new Result(false, false, 'token失效!');
}
$data = ['user_id' => $userId, 'token' => $token];
//数据库获取token方法我判断的是add_time距离当前时间要小于1小时(token时效设置的1小时)
$res = $this->DB->getTokenByCondition($data);
if (empty($res))
{
return new Result(false, false, 'token失效!');
}
$data['add_time'] = 'NOW()';
$res = $this->DB->updateToken($data);
if (!$res)
{
return new Result(false, false, '修改token时间失败!');
}
return new Result(true, true, "修改token时间成功");
}