cookie登录_真正实现独立wordpress站点之间共享用户数据及cookie登录

今天与大家一起分享两个或多个独立的wordpress站点如何共享用户数据及共享cookie登录、退出。写本文之前我已查考网上的很多方法,部署后大部分做到了共享用户数据,但不能共享cookie登录,如在A站登录了,B站不能共享cookie,B在还是需要登录一次。网上的这些方法更奇怪的是B站登录了,反而A站失去了cookie退出登录了,或者是A站(主站)登录了可以共享给B站,但B站登录了却不能共享给A站。总之,不能做到AB站之间相互共享登录。问题在哪里呢,接下来为你揭秘,如何你有这方面的应用需求,可以参考本文的方法。

一、前提条件

实现多个独立的wordpress站点共享用户数据及cookie登录的一个前提条件是,记住了哦,非常重要!!只能实现同一个域的域名下实现,如根域名是8ym8.com,则www.8ym8.com,二级域名a.8ym8.com,b.8ym8.com。。。。等等都属于同一个域的域名。两个不同域名(如baidu.com和taotiao.com),是不能实现的,这是由web浏览器的cookie机制决定的,无论你服务器端怎么配置,客户端浏览器始终不会让你配置的不能域名现实cookie共享,否则这个世界不是乱了套了?

二、开始之前先体验效果

www.8ym8.com 8源码吧为主站,先简称为A站;s.8ym8.com 油门学院为另外一个独立站点 ,在这里我们成为B站,两个站点在程序上是相互独立的,他们都有自己独立的运行源码程序,这点和wordpress站点多开原理是不一样的, wordpress站点多开使用的是同一套wordpress框架源码,用不同的域名和主题实现的。

大家可以尝试登陆以上两个站点,体验独立站点相互间的共享登录。下面是实现登录后的效果图。

d5d17b6d37cae2831da7c05e21f43a69.png
24002394b7bc44860929116cbd6bc4ef.png

三、部署A站

按正常的程序安装好A站。A、B两个站点均在宝塔服务器环境下运行。

打开A站根目录下wp-config.php文件,拷贝关键信息,备着有用:

1、数据库信息(记为A1)

/** WordPress数据库的名称 */define( 'DB_NAME', 'sql_XXX_com' );

/** MySQL数据库用户名 */define( 'DB_USER', 'sql_XXX_com' );

/** MySQL数据库密码 */define( 'DB_PASSWORD', 'XXXXXXXXXX' );

/** MySQL主机 */define( 'DB_HOST', '127.0.0.1' );

/** 创建数据表时默认的文字编码 */

define( 'DB_CHARSET', 'utf8mb4' );

/** 数据库整理类型。如不确定请勿更改 */define( 'DB_COLLATE', '' );

2、数据库表前缀(此处记为A2)

$table_prefix = 'wpXXXX_';

3、身份验证密匙串,不同的站点密匙是不一样的(此处记为A3)

define( 'AUTH_KEY', 'q[D-3dZP)r{4])V9&@!T2Xnkb4Q,)BMOhc{fQ;nKs}cjDGp9?Ul+*=k_zN?x=B' );

define( 'SECURE_AUTH_KEY', 'Pz${Eu1b.NewSSPd4N @eyN|LplY,Ot18u,|#W/.hR:EEIoF;(LxQy85w+f' );

define( 'LOGGED_IN_KEY', '?PAGD4u^pF.UenM/U72fjz7b{7I_$$K[t)#b' );define( 'NONCE_KEY', 'stRUl-E!!~FM}[Us%@Ds,?T>E&2.7)kE6,KQ2fE @o~hH8kk5.d9/NWvGeBno?jL' );

define( 'AUTH_SALT', 's8Ng*dTEdx^C?z]|(UIKp&^CwSp:NVADB Zv@4td.Q.stmFJtyhPAVzFg)b9' );

define( 'SECURE_AUTH_SALT', ',:~S35O]vxi:k;F8ms 1!!BnjouGqRe_o^Uqe9n?|v;%A%fsM8oD6WFRP,|!1z|7' );


define( 'NONCE_SALT', 'Lrvjh^}V8j[[c)CV1@ekaN7_;3

四、部署B站

按独立站点的方式安装好B站,记得在安装时取与A站不同的数据库表前缀。

五、数据库导入

独立站点要共享用户数据,只能使用同一个数据库,我们使用的是A站点的 users和usermeta用户数据库表(两个表有表前缀,此处省略)作为多个独立站点的用户数据共享,其他数据库表则是独立的。

在宝塔面板数据库中找到A站点数据库并打开,找到users和usermeta两个数据库表,并按如下格式记录如下信息,此处记为A4

define( 'CUSTOM_USER_TABLE', '表前缀_users' );define( 'CUSTOM_USER_META_TABLE', '表前缀_usermeta' );

在宝塔面板数据库中找到B站的数据库,备份B站点数据库,得到B站点的数据库SQL压缩文案。如下图:

2addc634006034116f205184803586ac.png

再次打开A站点数据库,导入B站点的数据库备份文件,在操作前最好先备份好A站点的数据库,以备不急之需。另外,由于两个站点使用不同的表前缀,B站点数据库导入A站点数据库时是不会覆盖A站点原有的数据库表,只会增加B站点的数据库表。

六、编辑A站点根目录下wp-config.php文件

1、在原有的A3信息上加上如下两行,后面的32位字符可以自己另外取值。(此两个密匙串在此处记为A5)

define('SECURE_AUTH_SALT', 'T{|$,t--3W~DdZPO]$3rigO-;E_;%I;g?7;X.b-A?5HL|9ywvagQQFs-TR4KBT');

define('SECRET_SALT','Q$QuHIfQO^(CtrL5D(fcG$miB,fE2]-~::qoB,O_?o|TfgNfQB/x/kv$Tg1Aa7Hf');

2、加入共享cookie配置。

关键点就在这里。网上的方法之所以不能时间独立站点之间共享cookie登录,是因为配置还不完善,导致不同站点在与浏览器进行session会话时,经过我在调取浏览器session会话信息发现不同站点写入的session值是不一样的,这样理所当然是不同共享了。

在“/* 好了!请不要再继续编辑。请保存本文件。使用愉快! / /* WordPress目录的绝对路径。 */” 这句话上面加上下面的配置语句(此处即为A6):

define('ADMIN_COOKIE_PATH','/');define('COOKIEPATH','/');define('SITECOOKIEPATH','/');define('COOKIE_DOMAIN', '8ym8.com');         //此处修改为你自己的根域名ini_set('session.cookie_domain', '8ym8.com');  //此处修改为你自己的根域名session_start(); 

重点解释define('COOKIE_DOMAIN', '8ym8.com'); 和session_start(); 两个语句,网上的教程缺少的就是这两句,导致session会话值不同。此处设置session会话期间的主域名,保证与浏览器会话期间多个独立站点有相同的session.cookie_domain值,后面的域名填写你自己网站的根域名(注意是根域名,虽然主站域名是www打头的)。还要在后面加上session_start();语句,保证前面的设置能够执行。

七、编辑B站点根目录下wp-config.php文件

1、 把A1数据库信息复制并覆盖掉B站原有的数据库信息

2、复制A4用户数据库表复制到 “/**#@+ *身份认证密钥与盐。”这句话的上面

3、把A5、A3 两部分的验证密匙串复制并覆盖掉B站原有的验证密匙串

4、在同样的位置,加入A6的cookie配置信息到B站

八、修改A、B两个站点的下 default-constants.php文件

大约在225行,对于 define( 'COOKIEHASH', md5( $siteurl ) ); 这一句,如果不修改,还会导致两个站点写入的COOKIEHASH值不同而导致不能共享登录,所以要把$siteurl换成很域名 'xxx.com'

if ( ! defined( 'COOKIEHASH' ) ) {     $siteurl = get_site_option( 'siteurl' );     if ( $siteurl ) {        define( 'COOKIEHASH', md5( '8ym8.com' ) );    //次吃换成你的根域名                    } else {        define( 'COOKIEHASH', '' );    }}

到这里完成后,多个独立站点就可以相互共享登录了。

还有一个问题是,wordpress 还需要在所有独立站点设置相同的用户角色,如果需要登录管理账户后同时管理多个站点,还需要给B站点设置管理权限,这一步是在数据库上操作的,大家可以网上查询这方面的资料。

九、还没完,还有一个大坑需要解决。

如何你的所有站点启用了Memcached缓存(不启用则无需配置第九步),为了使用户信息缓存是一致的,还需设置如下两步:

1、在宝塔面板配置PHP(我使用的是PHP7.3),在session配置一项中,缓存模式更改为Memcached。

d1ccbbf0836bc8a6ca06887ce066c2ab.png

2、在所有站点的根目录下wp-config.php文件中(开始了Memcached才会有如下两项设置),把WP_CACHE_KEY_SALT的值设置为相同值,如我设置了相同的“wwwym”:

define('ENABLE_CACHE', true);

define('WP_CACHE_KEY_SALT', 'wwwym');

大家在配置中有什么问题,欢迎留言,共同学习。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。
在Web开发中,Cookie是常用的一种状态管理方式,它可以在客户端浏览器和服务器之间传递信息,并且具有跨域的能力。但是在跨域场景下,不同域名之间Cookie是不能共享的。本文将介绍如何通过Java实现跨域Cookie共享的方法。 一、什么是跨域Cookie共享 在同源策略下,浏览器只允许当前域名下的页面访问该域名下的Cookie,而不允许其他域名的页面访问该域名下的Cookie。这就是所谓的Cookie跨域问题。 但是在实际开发中,我们经常需要在不同域名之间共享Cookie。例如,在OA系统中,用户登录后可能会跳转到其他子系统中,此时需要保持用户登录状态,就需要在不同域名之间共享Cookie。这就是所谓的跨域Cookie共享。 二、实现跨域Cookie共享的方法 在Java中,实现跨域Cookie共享的方法有两种: 1、使用第三方Cookie共享方案,例如:CAS、OAuth等。 2、手动实现Cookie共享,即在跨域场景下手动设置Cookie。 下面将介绍手动实现Cookie共享的方法。 三、手动实现Cookie共享 手动实现Cookie共享的原理很简单:在A域名下设置Cookie时,同时在B域名下也设置一个相同名称的Cookie。这样,在B域名下访问时就可以获取到A域名下的Cookie信息了。 具体实现步骤如下: 1、在A域名下设置Cookie时,同时在B域名下也设置一个相同名称的Cookie。 代码示例: ```java // 在A域名下设置Cookie Cookie cookie = new Cookie("userId", "123456"); cookie.setDomain(".domaina.com"); // 设置Cookie的域名为.domaina.com cookie.setPath("/"); // 设置Cookie的路径为根路径 cookie.setMaxAge(60 * 60 * 24 * 7); // 设置Cookie的生命周期为7天 response.addCookie(cookie); // 将Cookie添加到响应中 // 在B域名下设置相同名称的Cookie Cookie cookie = new Cookie("userId", "123456"); cookie.setDomain(".domainb.com"); // 设置Cookie的域名为.domainb.com cookie.setPath("/"); // 设置Cookie的路径为根路径 cookie.setMaxAge(60 * 60 * 24 * 7); // 设置Cookie的生命周期为7天 response.addCookie(cookie); // 将Cookie添加到响应中 ``` 2、在B域名下访问时,获取A域名下的Cookie信息。 代码示例: ```java // 获取A域名下的Cookie信息 Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { if (cookie.getName().equals("userId")) { String userId = cookie.getValue(); // TODO: 处理业务逻辑 break; } } } ``` 需要注意的是,在设置Cookie时,域名要以点号开头,例如:.domaina.com。这样设置后,所有以domaina.com结尾的子域名都可以共享Cookie。 四、总结 本文介绍了如何通过Java实现跨域Cookie共享的方法,即手动实现Cookie共享。在跨域场景下,手动实现Cookie共享可以很好地解决Cookie跨域问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值