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&mysql(六)
Oct 09 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
php实现简单洗牌算法
Jun 18 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
php实现高效获取图片尺寸的方法
Dec 12 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
php和C#的yield迭代器实现方法对比分析
Jul 17 PHP
Laravel 类和接口注入相关的代码
Oct 15 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
Thinkphp中Create方法深入探究
2014/06/16 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
javaScript如何跳出多重循环break、continue
2016/09/01 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
jquery实现动态添加附件功能
2018/10/23 jQuery
用Python编写简单的定时器的方法
2015/05/02 Python
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
Python中 map()函数的用法详解
2018/07/10 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
Python 如何实现访问者模式
2020/07/28 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
工程专业毕业生自荐信范文
2013/12/25 职场文书
校长寄语大全
2014/04/09 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
安全口号大全
2014/06/21 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
本科应届生求职信
2014/08/05 职场文书
出生医学证明书
2014/09/15 职场文书
银行奉献演讲稿
2014/09/16 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
2014年后勤工作总结
2014/11/18 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android