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 相关文章推荐
WordPress判断用户是否登录的代码
Mar 17 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
Jun 23 PHP
php设计模式 State (状态模式)
Jun 26 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
PHP闭包函数详解
Feb 13 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
php使用PDO获取结果集的方法
Feb 16 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
PHP命名空间简单用法示例
Dec 28 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
Yii2框架自定义类统一处理url操作示例
May 25 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判断变量类型常用方法
2012/04/24 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP中addslashes与mysql_escape_string的区别分析
2016/04/25 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
javascript数组去重小结
2016/03/07 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
Python常见工厂函数用法示例
2018/03/21 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
python实现猜数游戏
2020/03/27 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
浅谈html5 响应式布局
2014/12/24 HTML / CSS
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
给水工程专业毕业生自荐信
2014/01/28 职场文书
卫生安全检查制度
2014/02/04 职场文书
商场主管竞聘书
2014/03/31 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
Go使用协程交替打印字符
2021/04/29 Golang
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python