在thinkphp的开发中,经常会遇到session跨域的问题,比如,在www域名下用户登陆后,用户信息保存在session,想在其他二级域名或者三级域名下同步自动登陆,获取到session里面的用户信息,默认是不行的,需要做一些配置更改和测试才行,下面我来说说。
![af4bb78ed2096c3f538c7c878886c89c.png](https://i-blog.csdnimg.cn/blog_migrate/f0da9d4b9cd37252f5414a7a75d173b3.jpeg)
![9594d90b9c03c29766beb9b7e54f61e3.png](https://i-blog.csdnimg.cn/blog_migrate/e8b1211e4136e15cd64559344c6a0b69.jpeg)
![0981e9be63ecc97bd94e0a9b6f18df84.png](https://i-blog.csdnimg.cn/blog_migrate/9852830502cac52a6be69f4239ce4cf8.jpeg)
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