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的一些基础知识分享
Jul 27 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
使用php转义输出HTML到JavaScript
Mar 27 PHP
PHP 错误处理机制
Jul 06 PHP
PHP生成树的方法
Jul 28 PHP
php三种实现多线程类似的方法
Oct 30 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
Yii框架上传图片用法总结
Mar 28 PHP
php使用PDO执行SQL语句的方法分析
Feb 16 PHP
PHP读取XML格式文件的方法总结
Feb 27 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php 高效率写法 推荐
2010/02/21 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
跟我学Laravel之路由
2014/10/15 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
详解vue项目构建与实战
2017/06/27 Javascript
纯JS实现可用于页码更换的飞页特效示例
2018/05/21 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
微信小程序实现的日期午别医生排班表功能示例
2019/01/09 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
Python列表切片操作实例总结
2019/02/19 Python
python3实现猜数字游戏
2020/12/07 Python
Python如何实现爬取B站视频
2020/05/20 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
结构工程个人自荐信范文
2013/11/30 职场文书
工作的心得体会
2013/12/31 职场文书
会计求职自荐信
2014/06/20 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
运动会通讯稿200字
2015/07/20 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL