token是客户端和服务端交流的一种方式,原理是服务端生成token后给客户端,客户端携带token进行通讯。
服务端的责任第一是给新请求生成新的token,第二是验证客户端携带的token的可用性。
token可用保存在数据库中、session中、也可以存在cookie中,当然内存数据库也非常方便。
这里服务端生成token后交给客户端即可,客户端进行存储,每次请求时带上token,后端进行解密判断信息和有效期等。
//用户登录
protected function LoginAction() { //省略其他不相干代码 $expire = time() + 3600 * 12;//12h过期 $token = base64_encode('app'.'|'.$data['userid'].'|'.$expire.'|'.md5('app'.$data['userid'].$expire.'aaaabbbb')); return array('code'=>0,'msg'=>'登录成功','token'=>$token); } //接口认证 public function ApiAuthToken() { $info = self::decodeToken($_POST['token']); if (!$info) { return array('code'=>1000000,'error_msg'=>'token错误或非法'); } if ($info['expire'] < time()) { return array('code'=>1000000,'err_msg'=>'token已过期'); } if ($info['auth_secret'] <> md5($info['client'].$info['userid'].$info['expire'].'aaaabbbb')) { return array('code'=>1000000,'err_msg'=>'token非法'); } //todo ...... } //获取真实用户信息 private function decodeToken($token) { $array=explode('|',base64_decode($token)); if (!empty($array[0]) && is_numeric($array[1]) && !empty($array[2]) && !empty($array[3]) ) { return array('client'=>$array[0],'userid'=>$array[1],'expire'=>$array[2],'auth_secret'=>$array[3]); } return array(); }