记一次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('退出登录成功', [], '/');
    }

  

你不能把坏习惯扔出窗外 但你可以一步步赶下电梯
原文地址:https://www.cnblogs.com/Ychao/p/13954709.html