Yii2下session跨域名共存的解决方案


Posted in PHP onFebruary 04, 2017

前面谈过session相关配置,在开发的时候,常需要跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了一下处理方法。

无论是一二级域名,和不同域名下的跨域,无非要达到两点:

  • 客户端访问同一个sessionId,
  • 所有域名对应的服务器访问的session的数据的位置必须一致。

1.访问共同的sessionId主要是通过把当前的sessionId写进cookie里面

cookie在不同域名下是不能访问的,我们需要在访问在后台设置用户在登录的时候,把需要共用的登录信息的域名,如果是在1,2级域名下,直接把cookie设置为所属主域名,例如:

setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");

也许你会问:如果是在不同的域名呢?采用P3P技术简单解决,实现原理,在访问网站x.com的时候,y.com程序触发y.com文件的写入sessionid值,sessionid值便可以获取,然后把seesion值存入数据库,取相同的sessionid值便可。这就要求y.com里面的程序文件必需能跨域访问,默认情况下,浏览器是不能跨域设置cookie的,加上p3p头后才行。在对应php文件加上:header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

2.session数据存储位置一致的实现方法

session该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在,而非存储在服务器的内存中,在这里我们得修改为所有域下都能访问的方式。网上介绍了数据库存储,文件形式存储,内存存储, 如果用数据库存储session数据,网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,效率就会明显降低,可以考虑存在内存服务器来实现,下面的session.rar里面介绍的是数据库存session的实例。

在yii2下 处理这中问题,根据网上搜到的教程 终配置成功教程如下:

在frontend的config文件夹中main.php中配置

$host = explode('.', $_SERVER["HTTP_HOST"]);
if (count($host) > 2) {
  define('DOMAIN', $host[1] . '.' . $host[2]);
} else {
  define('DOMAIN', $host[0] . '.' . $host[1]);
}
define('DOMAIN_HOME', 'www.' . DOMAIN);
define('DOMAIN_USER_CENTER', 'man.' . DOMAIN);
define('DOMAIN_API', 'api.' . DOMAIN);
define('DOMAIN_EMAIL', 'mail.' . DOMAIN);
define('DOMAIN_LOGIN', 'login.' . DOMAIN);
define('DOMAIN_IMG', 'img.' . DOMAIN);

然后配置User 和 Session:

'user' => [
  'enableAutoLogin' => true,
  'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN],
],
'session' => [
  'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0],
  'timeout' => 3600,
],

这里在配置项的user和session里 我把domain写死了例如:'domain'=>'.baidu.com',这样就不用判断了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 删除数组元素
Jan 16 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
php中json_encode UTF-8中文乱码的更好解决方法
Sep 28 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
php创建多级目录与级联删除文件的方法示例
Sep 12 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
Jsonp劫持学习
Apr 01 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 #PHP
php基于dom实现读取图书xml格式数据的方法
Feb 03 #PHP
php基于dom实现的图书xml格式数据示例
Feb 03 #PHP
PHP遍历目录文件的常用方法小结
Feb 03 #PHP
详解yii2实现分库分表的方案与思路
Feb 03 #PHP
php获取客户端IP及URL的方法示例
Feb 03 #PHP
php观察者模式应用场景实例详解
Feb 03 #PHP
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
[01:18]DOTA2超级联赛专访hanci ForLove淘汰感言曝光
2013/06/04 DOTA
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
Python列表(list)常用操作方法小结
2015/02/02 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
用python批量下载apk
2020/12/29 Python
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
介绍一下木马病毒的种类
2015/07/26 面试题
大学生创业计划书的范文
2014/01/07 职场文书
小学课外阅读总结
2014/07/09 职场文书
律师函格式范本
2015/05/27 职场文书
整脏治乱工作简报
2015/07/21 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
2019年教师节活动策划方案
2019/09/09 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
Win2008系统搭建DHCP服务器
2022/06/25 Servers