标签:单点 private session cookie user key thinkphp data 主从
主要思想:首先需要共享session_id 然后单个网站登录时。通过加密sessionid和用户信息生成一个cookie(),另一个网站进入时如果有这个cookie ,则解析这个cookie.获取登录状态 设置自动登录
1.看上一个随笔,将两个站点的cookie的domain设置为顶级域名
2.开启跨域中间件:
app/middleware.php
<?php // 全局中间件定义文件 return [ //跨域 \think\middleware\AllowCrossDomain::class, // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初始化 \think\middleware\SessionInit::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'=>'huixx.cn']); setcookie("PHPSESSID", null, time() - 1000, "/", "huixx.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('退出登录成功', [], '/'); }
标签:单点,private,session,cookie,user,key,thinkphp,data,主从 来源: https://www.cnblogs.com/Ychao/p/13954709.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。