设置cookie和session的登录双重安全加密

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);
            }
        }

猜你喜欢

转载自blog.csdn.net/pan_yuyuan/article/details/81879826