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安全配置
Dec 06 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
Jun 09 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
ThinkPHP整合百度Ueditor图文教程
Oct 21 PHP
php验证session无效的解决方法
Nov 04 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 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
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
克隆javascript对象的三个方法小结
2011/01/12 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
简介AngularJS的视图功能应用
2015/06/17 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
js实现时间日期校验
2020/05/26 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
鱼油专家:Omegavia
2016/10/10 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
经济系大学生求职信
2013/10/01 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
借款协议书范本
2014/04/22 职场文书
2016年党员公开承诺书范文
2016/03/24 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript