WordPress多站点解决二级域名的单点登录

Wordpress多站点有两种形式:子目录subdirectory和子域名subdomain,在子域名方案中,cookie 无法共享,因此也就难以实现多站点的SSO单点登录

查阅资料发现 wp-includes/ms-default-constants.php 文件中有如下代码:

if( !defined( 'ADMIN_COOKIE_PATH' ) ){
	if( ! is_subdomain_install() || trim( parse_url( get_option( 'siteurl' ), PHP_URL_PATH ), '/' ) ){
		define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH );
	}else{
		define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' );
	}
}

其中 define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . 'wp-admin' ); 将cookie的有效路径指定为 /wp-admin,其他单点都不能共享auth_cookie,解决办法也比较直接,只需要在 wp-config.php 中增加如下代码段即可:

define('COOKIE_DOMAIN', '.xxx.com');
define('ADMIN_COOKIE_PATH', '/');

其中 COOKIE_DOMAIN 设置为多站点的主域名。