微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP编程:Yii2下session跨域名共存的解决方案

《Yii2下session跨域名共存的解决方案》要点:
本文介绍了Yii2下session跨域名共存的解决方案,希望对您有用。如果有疑问,可以联系我们。

PHP学习前面谈过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',这样就不用判断了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐