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将向Java靠拢
Oct 09 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
Apr 12 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
php的hash算法介绍
Feb 13 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
PHP中SimpleXML函数用法分析
Nov 26 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
PHP实现Google plus的好友拖拽分组效果
Oct 21 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
php Smarty date_format [格式化时间日期]
2010/03/15 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
Smarty模板配置实例简析
2019/07/20 PHP
重定向实现代码
2006/11/20 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
微信小程序JS加载esmap地图的实例详解
2019/09/04 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
python join方法使用详解
2019/07/30 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
数控加工专业毕业生自荐信
2013/09/27 职场文书
室内设计专业个人的自我评价
2013/12/18 职场文书
回门宴父母答谢词
2014/01/26 职场文书
企业员工培训感言
2014/02/26 职场文书
大学生两会精神学习心得体会
2014/03/10 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
招标保密承诺书
2015/01/20 职场文书
勇敢的心观后感
2015/06/09 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js