{
$userinfo=$this->where(['adminuser'=>xss_clean($data['username'])])->find();
if($userinfo['adminpass']!=md5(md5(xss_clean($data['password']).'&*sdfaka019@$%..'))){
return ['valid'=>0,'msg'=>'用户名或者密码不正确'];
}
$localkey=session('localkey',md5($data['username'].md5(md5($data['password'].'&*sdfaka019@$%..'))));
$yunkey=session('yunkey',md5($userinfo['adminuser'].$userinfo['adminpass']));
$token=session('token',md5(date("YmdHis")));
if($localkey==$yunkey){
cookie('adminCookie', session('token'), 3600);
$setToken=(new OptionModel())->updateToken(session('token'));
return ['valid'=>1,'msg'=>'登陆成功'];
}
}
========================
以上是登陆逻辑代码,模型通过控制器传过来的表单内容去数据查到,如果查找到了就记录一个名为localkey的session(表单信息进行加密),一个名为yunkey的session(数据库账号密码进行加密),一个名为token的session(将登陆时间组合加密写入数据库),同时token的内容也通过cookie储存在本地。
=========================
以下是验证登陆状态代码
=========================
if(!$localkey || !$yunkey)
{
$this->redirect(url('/admin/login/login'));
exit();
}
if($localkey!=$yunkey ){
$this->redirect(url('/admin/login/login'));
exit();
}
if($res['token']!=session('token')){
Session::clear();
$this->redirect(url('/admin/login/login'));
exit();
}
if($res['token']!=cookie('adminCookie')){
Session::clear();
$this->redirect(url('/admin/login/login'));
exit();
}
cookie('adminCookie', $res['token'], 3600);
============================
逻辑是:如果session都不存在,或者本地表单信息加密如果不等于数据库账号密码信息加密的话就无法登陆,如果本地的token与数据库的token不一致就无法登陆,如果数据库的token与本地cookie的token不一致就退出登录
最佳答案