1987WEB视界-分享互联网热点话题和事件

您现在的位置是:首页 > 域名 > 正文

域名

thinkphp5开发中session跨域(二级域名)问题的解决

1987web2022-10-18域名254
在thinkphp的开发中,经常会遇到session跨域的问题,比如,在www域名下用户登陆后,用户信息保存在session,想在其他二级域名或者三级域名下同步自动登陆,获取到session里面的用户

在thinkphp的开发中,经常会遇到session跨域的问题,比如,在www域名下用户登陆后,用户信息保存在session,想在其他二级域名或者三级域名下同步自动登陆,获取到session里面的用户信息,默认是不行的,需要做一些配置更改和测试才行,下面我来说说。

1、打开应用目录下的配置文件,一般为 系统根目录/application/config.php,找到session配置项(如果没有,就自己添加),如下:

// +----------------------------------------------------------------------

// | 会话设置

// +----------------------------------------------------------------------

session => [

id => ,

// SESSION_ID的提交变量,解决flash上传跨域

var_session_id => ,

// SESSION 前缀

prefix => ,

// 驱动方式 支持redis memcache memcached

type => ,

// 是否自动开启 SESSION

auto_start => true,

//过期时间

expire => 24*3600*7,

domain => 您的根域名, //关键点

table_name => session,

],

其中的 domain请配置为您的根域名,即不带www的顶级域名,意思就是session的作用域为整个域名根(包含所有下级域名),就行了。

2、清空浏览器的缓存(cookie和临时文件)、清空thinkphp框架的缓存,然后测试是否生效(这里很重要,很多码农在这里扑街,发现怎么也不生效,其实是浏览器的缓存作怪,哈哈哈!)

3、如果域名经常变动怎么办呢,比如我们的erdaicms旅游网站程序,是面对各种客户的,每个客户如果都需要去手工配置,就麻烦大了,这里我在提供一段代码,如下:

$ERdaidomain=$_SERVER[SERVER_NAME];

$re_domain=;

$domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "com.cn", "cn","cc","name","info","net.cn","name","biz","top","club","red","wang","org.cn","ren","la");

$array_domain = explode(".", $ERdaidomain);

$array_num = count($array_domain) - 1;

if ($array_domain[$array_num] == cn) {

if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {

$re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];

} else {

$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];

}

} else {

$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];

}

上面的 $re_domain 为自动获取到的实时的根域名,将他赋值给session的domian就行啦