标签归档:wordpress

让用户在多个WordPress网站之间通行登录

这个是《同一个用户登录多个wordpress站点》的后续系列。

我测试了很多方法,只有《多个wordpress网站共享用户数据的方法》中提到的方法可行。

现在记录自己的配置方法如下:

1. 出于安全问题,cookie不能在多域名之间共享,如果你追求的是www.youdomain.com和www.anotherdomain.com之间通行登陆,以下的方法不适用。也许你应该尝试自动登录

2. cookie也不会在多浏览器之间共享,以下的方法只能实现在同一个浏览器中通行登陆。

3. 支持的类型:

次级域名之间的通行登陆,例如sub1.yourdomain.com和sub2.yourdomain.com之间通行登陆

同一个域名下不同目录之间互相登陆,例如www.yourdomain.com和www.yourdomain.com/site以及www.yourdomain.com/site1之间通行登陆。

实现步骤:

1. 打开主站的wp-config.php,找到如下代码, 如果宏定义的值不是随机字符串,点击这里生成。
define(‘AUTH_KEY’, ‘{+Y:wtH~E}E2g7#$/_{%df9F2!9ed}m=E%^}%,[Z#;+R+vk]@q:x4u)?G,-#I89g’);
define(‘SECURE_AUTH_KEY’, ‘ -$Hdq00N4F|iv4n&|}W]h:U}5?+jUb%)G#zgr={ 4yvgSRO;h-K+}R;&n.AAFv0’);
define(‘LOGGED_IN_KEY’, ‘/K{%RclWh_e|46hl6w.b&C*U2cQ$&ZpL)n@|itUtHPm#PMS+9Jd|m%*5h#NQ1{k%’);
define(‘NONCE_KEY’, ‘-Aluq5#|Pp:D6EsB8G-os=o${5FmP6!S#U)xgQsvAR2+0E/mz,{[b+6[zX4]OnUU’);
define(‘AUTH_SALT’, ‘X:_SQx~;s}9|FIZ:pvR|beA>Jca_}.;S+sW>-^GFdFQ zjQUA<+G0z{_S+M’);
define(‘LOGGED_IN_SALT’, ‘d`U.1inPDll}cH1Qcp,IaUeB+TO_m440$>IGs4B;v$)q^N>g[!&;t’);
define(‘NONCE_SALT’, ‘t`.LtDKyc9(fQlA@EMrvu*F(U6&CV:%qKQ:eKz+0I*.V,0(@9E~9K!2087pJqs=Q’);

 

2. 拷贝主站wp-config.php中的AUTH_KEY和SECURE_AUTH_KEY到英文站的wp-config.php中,替换相应的行。如果嫌麻烦上面代码全部拷贝到英文站也可以。

3. 在主站和英文站的wp-config.php中创建下面代码,记得去生成一个复杂的随机字符串,不要直接拷贝,主站和英文站的SECRET_SALT值要相同
define(‘SECRET_SALT’, ‘Q$QuHIfQO^(CtrL5D(fcG$miB,fE2]-~::qoB,O_?o|TfgNfQB/x/kv$Tg1Aa7Hf’);

4. 在主站和英文站的wp-config.php中创建如下代码

define(‘ADMIN_COOKIE_PATH’, ‘/’);
define(‘COOKIEPATH’, ‘/’);
define(‘SITECOOKIEPATH’, ‘/’);
define(‘COOKIEHASH’, md5(‘jldsfjoifejlkoDS9r23jlsdjf’)); /*用自己的随机字符串替换*/

5. 不同次级域名之间的通行登陆
在所有网站的wp-config.php中再加上
define(‘COOKIE_DOMAIN’, ‘yourdomain.com’);
不要加www

 

 

同一个用户登录多个wordpress站点

在一个服务器上,安装多个wordpress网站。例如:A网站为主站,域名是 example.com

B网站是子站,域名是b.example.com

首先域名解析的时候,b.example.com是A记录,同A网站一样需要指向同一个服务器ip。

nginx的配置里就是

server{
root /var/www/html/siteA;
}
server{
root /var/www/html/siteB;
}

其余部分都一样。

首先安装siteA。

然后安装siteB,打开 wp-config.php,将其中

$table_prefix = ‘wp_’;

改为其他的表头,在这里我改成了

$table_prefix = ‘wpB_’;

然后就可以正常安装siteB。

 

安装完成之后,可以用siteB的管理员账号登录一下,记得用完之后要退出登录。接下来,我们来打通A、B两站的用户数据。

 

在siteB的目录下,wp-config.php 文件中,在

 /* 好了!请不要再继续编辑。请保存本文件。使用愉快! */

这句话之前,插入

define( ‘CUSTOM_USER_TABLE’, ‘wp_users’ );
define( ‘CUSTOM_USER_META_TABLE’, ‘wp_usermeta’ );

这时A站的用户都可以登录B站。但安装B站时的管理员用户已经无法登录B站。

用A站的管理员用户名登录B站时,会发生没有权限访问后台的问题。这时需要在wp_usermata这张表里改管理员用户的一些信息。

首先要确定A站管理员用户的UID,例如我的管理员用户UID是6.

那么在mysql数据库中,选中wordpress的数据库。这里假设wordpress数据库名字就是wordpress,

数据库B的表头是wpB_。

use wordpress;
INSERT INTO wp_usermeta(user_id,meta_key,meta_value) VALUES(6, ‘wpB_capabilities’, ‘a:1:{s:13:”administrator”;s:1:”1″;}’);
INSERT INTO wp_usermeta(user_id,meta_key,meta_value) VALUES(6, ‘user_level’, 10);

 

如果发现安装的不好,需要删除重新安装,怎么删除所有B站的表呢?用下面这条mysql语句可以生成所有的要删除的table,然后将生成的命令复制到终端中,就可以删除了。

SELECT CONCAT(‘drop table ‘,table_name,’;’) FROM information_schema.tables where information_schema.tables.TABLE_NAME LIKE ‘wpB_%’ ;

关于anti-spam

昨天发生了博客被suspended的情况,询问了wordpress.com的support工作人员。
Your site was flagged by our automated anti-spam controls.
看来不能老用邮件发日志,否则会被标记成垃圾投递

Ryan, Thanks a lot!