app登录access_user_token安全性

public function isLogin1()
{   
    //获取header头的access_user_token
    $access_user_token = $this->headers['access-user-token'];
    if( empty($access_user_token) ) {
        return false;
    }
    //判断access_user_token是否唯一
    if( Cache::get($access_user_token) ) {
        return false;
    }
    //解密
    $result = Aes::decrypt($access_user_token);
    if( empty($result) ) {
        return false;
    }
    //判断access_user_token 是否是原本token+"&&"+13位时间戳
    if( !preg_match('/&&/', $result) ) {
        return false;
    }
    list($token, $time) = explode('&&', $result);
    if( empty($token) || empty($time) ) {
        return false;
    }
    //判断是否在有效期 10秒内有效
    $time = ceil($time / 1000);
    if( time() - $time > 10 ) {
        return false;
    }
    //根据token查询数据
    $user = User::get(['token' => $token]);
    //判断token是否有效,用户状态是否正确
    if( empty($user) || $user['status'] != 1 || time() > $user['time_out'] ) {

        return false;
    }
    //缓存access_user_token 保证仅一次有效
    Cache::set($access_user_token, 1, 601);
    $this->user = $user->toArray();
    return true;

}

 

posted @ 2020-08-04 22:08  X__cicada  阅读(283)  评论(0编辑  收藏  举报