如何判断前端页面是否登录状态?
1、登录成功JQ生成缓存
<script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>
//jq生成以及获取缓存插件,给予jq
<script type="text/javascript" src="js/jquery.cookie.js"></script>
$.cookie("token", token, { expires: days, path: "/" });
第一个为缓存名,第二个为缓存的值token(由后台提供),days缓存失效时间由后台提供数据,“/”缓存的数据使用范围表示全局,全部网页可用
2、登录成功之后后台的处理
登录成功之后,将用户的user_id存入到token表中。返回数据是一个token字符串
public function setToken($user_id){
$token = new static();
$token_str = md5($user_id . time() . mt_rand(0, 99999));
$token->user_id = $user_id;
$token->time_out = $this->getTimeOut();
$token->token = $token_str;
return $token->save() ? $token_str : false;
}
3、在登录页面,成功之后,将返回的token字符串存入到cookie中
function set_user(token) {
var days = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 7;
$.cookie("token", token, { expires: days, path: "/" });
}
4、前台页面获取token
//根据token获取token
function get_user() {
return $.cookie("token") || 0;
}
//如果获取不到token,跳转到登录页面,由前端判断去登录
function get_user_login() {
return get_user() || (location.href = _MOBILE +"login_login");
}
5、接口判断是否有token ajax提交、
function get_user_info() {
var token = get_user_login();
$.ajax({
url: _API + "user_center",//请求地址
type: "POST",
dataType: "json",
async: true,
//头部信息,ajax提交token的方式
beforeSend: function beforeSend(request) {
request.setRequestHeader("Authorization", token);
},
success: function success(data) {
if (data.type == 'ok') {
//如果返回的数据 type的值为ok 成功获取数据
} else {
location.href = _MOBILE +"login_login";
}
}
});
}
6、后台如何判断是否接收到头部信息
//PHP获取头部信息的函数,可以获取到ajax提交的头部信息
function getToken()
{
$headers = array();
foreach ($_SERVER as $key => $value) {
if ('HTTP_' == substr($key, 0, 5)) {
$headers[str_replace('_', '-', substr($key, 5))] = $value;
}
}
if (isset($headers["AUTHORIZATION"]))
return $headers["AUTHORIZATION"];
else
return "";
}
//api模型 自动加载获取token,根据token获取user_id 如果获取不到,--->登录
class ApiController extends GqController
{
public $user_id;
public function __construct($_init = false)
{
if ($_init) {
/** @var TokenGqModel $tokenModel */
$tokenModel = gqmodel('token');
$token = getToken();
$this->user_id = $tokenModel->getUserIdByToken($token);
if (!$this->user_id) {
return_error('请登陆', '999');
}
}
}
}
总结:
接口对接实质:
1、登录成功php生成token储存到数据库表中,
2、返回到前端页面js储存cookie的值‘token’
3、ajax提交头部信息,头部信息的值用token
4、后台PHP接收头部信息,接收到了获取用户id