1.登录界面提交过来的数据进行cookie和session的设置,其中cookie设置加密确保安全性
public function index(){
if(IS_POST){
$username=I('post.username');
$pwd=I('post.pwd','','md5');
/*通过调用模型来获取查询结果,此处D方法为thinkphp内置,意为采取自定义的方式实例化模型
相当于 $User = new \Home\Model\AdminModel();
当 \Home\Model\AdminModel 类不存在的时候,D函数会尝试实例化公共模块下面的 \Common\Model\AdminModel 类*/
$adminInfo = D('admin')->check($username,$pwd);
if($adminInfo){
//登录成功后使用cookie存储登录用户信息
session('adminInfo',$adminInfo);
//加密函数加密
$lockInfo=addLock($adminInfo);
cookie('adminInfo',$lockInfo,3600);
$this->redirect('Index/index');
}else{
cookie('isLogin',0);
$this->error('用户名或者密码输入有误!','',1);
}
}else{
$this->display('login');
}
}
2.加密函数如下:
function addLock($arr){
//数组进行序列化
$str=serialize($arr);
$key='$#**)UU*#';
$newStr=md5($key.$str);
return $newStr;
}
3.在公共控制器中初始化的过程中设置cookie和session的验证,如果没设置session或者提交的内容与浏览器存储的内容不符合的话就会提示登录失败:
function __construct(){
//加载父类的构造方法
parent::__construct();
$sessionInfo=session('adminInfo');
$cookieInfo=cookie('adminInfo');
//如果设置了session或者经过加密后的提交内容与cookie上次的设置值不相等的话就提示错误
if(!$sessionInfo||$cookieInfo!=addLock($sessionInfo)){
//如果没有登录则1秒后跳转到登录页面
$this->error('您还没登录,请先登录!',U('Login/index'),1);
}
}