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实现的在线人员函数库
Apr 09 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
PHP验证类的封装与使用方法详解
Jan 10 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 PHP
php 多继承的几种常见实现方法示例
Nov 18 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
如何过滤高亮显示非法字符
2006/10/09 PHP
PHP5中Cookie与 Session使用详解
2013/04/30 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JavaScript动态创建link标签到head里的方法
2014/12/22 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
PHP webshell检查工具 python实现代码
2009/09/15 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
Python3 读取Word文件方式
2020/02/13 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
中学生操行评语
2014/04/24 职场文书
三方股东合作协议书范本
2014/09/28 职场文书
公司员工离职证明书
2014/10/04 职场文书
2015年清明节活动总结
2015/02/09 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
用Python写一个简易版弹球游戏
2021/04/13 Python