主要思想:首先需要共享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('退出登录成功', [], '/');
}