一、条件条件
实现多个独立的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框架源码,用不同的域名和主题实现的。
大家可以考试测验上岸以上两个站点,体验独立站点相互间的共享登录。下面是实现登录后的效果图。
三、支配A站
按正常的程序安装好A站。A、B两个站点均在宝塔做事器环境下运行。
打开A站根目录下wp-config.php文件,拷贝关键信息,备着有用:
1、数据库信息(记为A1)
/ WordPress数据库的名称 /define( 39;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');
大家在配置中有什么问题,欢迎留言,共同学习。