您的位置 首页 php

thinkphp5开发中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就行啦

文章来源:智云一二三科技

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

文章地址:https://www.zhihuclub.com/79979.shtml

关于作者: 智云科技

热门文章

网站地图