记录一下:
登录生成签名:
//生成登录签名
$logintime = time();
$authData = [
'uid' =>$row['uid'],
'logintime' =>$logintime,
];
$login_token = data_auth_sign($authData);
session('login_token',$login_token );
common.php
/**
* 数据签名认证
*
* @param array $data 被认证的数据
*
* @return string 签名
*/
function data_auth_sign($data)
{
//数据类型检测
if (!is_array($data)) {
$data = (array)$data;
}
ksort($data); //排序
$code = http_build_query($data); //url编码并生成query字符串
$sign = sha1($code); //生成签名
return $sign;
}
判断前台是否登录:
private function is_front_login(){
$uid = session('uid');
if(!$uid) {
return false;
}
$rowdata = model('user')->where(['uid'=>$uid])->find();
if(!$rowdata){
session('uid',null);
session('session_start_time',null);
session('login_token',null);
return false;
}
//二次校验,防止登录用户session被改,及一个账号只能在一台设备上面登录
if((session('login_token') != $rowdata['login_token'])){
session('uid',null);
session('session_start_time',null);
session('login_token',null);
return false;
}
//判断登陆有效期
if(time()-session('session_start_time') > config('SESSION_OPTIONS')['expire']){
session('uid',null);
session('session_start_time',null);
session('login_token',null);
return false;
}else{
session('session_start_time', time());
}
return $rowdata;
}