一、条件条件

实现多个独立的wordpress站点共享用户数据及cookie登录的一个条件条件是,记住了哦,非常主要!

只能实现同一个域的域名下实现,如根域名是8ym8.com,则www.8ym8.com,二级域名a.8ym8.com,b.8ym8.com。



等等都属于同一个域的域名。
两个不同域名(如baidu.com和taotiao.com),是不能实现的,这是由web浏览器的cookie机制决定的,无论你做事器端怎么配置,客户端浏览器始终不会让你配置的不能域名现实cookie共享,否则这个天下不是乱了套了?

二、开始之前先体验效果

php多站共享登录真正实现自力wordpress站点之间共享用户数据及cookie登录 GraphQL

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

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

三、支配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', '?<h<ZR YL?okP&iy9GY~9G|_7WUE>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', 's8NgdTEdx^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<N.=#2e%JrR7SGCp)aZ],FHMn,tnuS-q0v763,' );

四、支配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压缩文案。
如下图:

再次打开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。

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

define('ENABLE_CACHE', true);

define('WP_CACHE_KEY_SALT', 'wwwym');

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