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 相关文章推荐
简单易用的计数器(数据库)
Oct 09 PHP
php 表单数据的获取代码
Mar 10 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
php中socket通信机制实例详解
Jan 03 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 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
Protoss兵种介绍
2020/03/14 星际争霸
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
javascript用函数实现对象的方法
2015/05/14 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
基于Vue2x的图片预览插件的示例代码
2018/05/14 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
Python实现批量将word转html并将html内容发布至网站的方法
2015/07/14 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python微信公众号开发平台
2018/01/25 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
基于Python获取docx/doc文件内容代码解析
2020/02/17 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
python 怎样进行内存管理
2020/11/10 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
司机检讨书
2014/02/13 职场文书
客服专员岗位职责
2014/02/28 职场文书
单位租房协议书范本
2014/12/04 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
《实心球》教学反思
2016/02/23 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
JavaScript 原型与原型链详情
2021/11/02 Javascript