zoukankan      html  css  js  c++  java
  • 记一次thinkphp 配置主从域名网站单点登录,退出

    主要思想:首先需要共享session_id  然后单个网站登录时。通过加密sessionid和用户信息生成一个cookie(),另一个网站进入时如果有这个cookie ,则解析这个cookie.获取登录状态 设置自动登录

    1.看上一个随笔,将两个站点的cookie的domain设置为顶级域名

    2.开启跨域中间件:

    app/middleware.php

    <?php
    // 全局中间件定义文件
    return [
        //跨域
        	hinkmiddlewareAllowCrossDomain::class,
        // 全局请求缓存
        // 	hinkmiddlewareCheckRequestCache::class,
        // 多语言加载
        // 	hinkmiddlewareLoadLangPack::class,
        // Session初始化
         	hinkmiddlewareSessionInit::class
    
    ];
    

    3.生成rsa加密密钥

    http://tool.chacuo.net/cryptrsapubkey  

    4.编写加密解密方法  公钥以及私钥配置在:config/app.php

    function en_de_crypt($type,$data){
            //获取sessionid
            $private_key_pem = config('app.private_key');
            // $password = config('app.password');
            $public_key_pem = config('app.public_key');
    
            //  $data = '123321';
            #校验私钥,如果有证书密码,则填写第二参数
    //      $private_key_pem2=openssl_get_privatekey ($private_key_pem);
    //        /***第二种***/
    //        //私钥加密
    //        $res=openssl_private_encrypt($data,$signature,$private_key_pem);
    //        var_dump($res);
    //        //公钥解密,$decode是解密后的数据
    //        $res=openssl_public_decrypt($signature,$decode,$public_key_pem);
    //        var_dump($res,$decode);
    
            if($type == 1){
                //加密
                //公钥加密
                openssl_public_encrypt($data,$signature,$public_key_pem);
                return $signature;
            }else{
                //解密
                //私钥加密,$decode是解密后的数据
                openssl_private_decrypt($data,$decode,$private_key_pem);
                return $decode;
            }
    
    
    
    
        }
    

      5.登陆时操作

       //记录登录cookie 使用PHPSESSID 拼接 用户id 再进行RSA加密
                $php_sessid = cookie('PHPSESSID');
                $data = $php_sessid.$user['id'];
                $cn =  $this->en_de_crypt(1,$data);
                cookie('googlespider',$cn);
    

      6.进入网站时操作:

          $this->user = session('user');
            if(!$this->user){
                $login_cookie = $_COOKIE['googlespider']??'';
    
                /**登录后生成加密的cookie 来*/
                if($login_cookie){
                    $phpssid = cookie('PHPSESSID');
                    $decrypted_data =   $this->en_de_crypt(2,$login_cookie);
                    if($decrypted_data){
                        $id = str_replace($phpssid,'',$decrypted_data);
                        $user = User::find($id);
                        if($user){
                            session('user',$user);
                            $this->user = $user;
                            //   cookie('googlespider',null);
                        }
                    }
                }
    
            }
    

      7.登出时操作:

        /**
         * 用户退出
         * @return mixed
         */
        public function out()
        {
            session('user', null);
            session('open_id',NULL);
    
            cookie("googlespider", NULL);
            // cookie("PHPSESSID", null,['domain'=>'xx.cn']);
    
            setcookie("PHPSESSID", null, time() - 1000, "/", "xx.cn");
            /*session('user', null);
            session('open_id',NULL);
            session_start();
            session_destroy();*/
            if(!$this->request->param('from')){
                echo '<script>window.location.href="https://s.x.cn/out?from=1"</script>';
            }else{
                $this->success('退出登录成功', [], 'https://x.a.cn/');
            }
            $this->success('退出登录成功', [], '/');
        }
    

      

    你不能把坏习惯扔出窗外 但你可以一步步赶下电梯
  • 相关阅读:
    BINARY and varBINARY
    DECIMAL Data Type
    timestamp ---自动更新修改时间 与 记录首次插入时间
    可视化之Berkeley Earth
    可视化之Earth NullSchool
    数据可视化之风向图
    “System.Runtime.InteropServices.COMException”类型的第一次机会异常在 ESRI.ArcGIS.Version.dll 中发生
    如何用arcgis进行WGS84的投影坐标变换
    break和continue的区别
    MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间
  • 原文地址:https://www.cnblogs.com/Ychao/p/13954709.html
Copyright © 2011-2022 走看看