Yii2实现多域名跨域同步登录退出

 更新时间:2017年7月6日 23:50  点击:1659
本文详细介绍了Yii2实现多域名跨域同步登录退出的教程,不会的同学可以参考一下,非常实用

在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend)  yun.xxx.com两部分,绑定两个域名,  我们知道在没有绑定域名的时候前后台可以同步登录和退出,但是绑定域名后就失效了,原因是session的作用域不同了。  两个域名的session作用域都只限制在了自己的域名上,我们的解决办法是将不同二级域名的作用域都改成顶级域名xxx.com。

在common/config/main.PHP里面增加如下代码:

 代码如下复制代码

//跨域session域名配置,获取当前主机名

$host_array=explode('.',$_SERVER["HTTP_HOST"]);

//针对com域名,获取顶级域名

if(count($host_array) == 3) {

  define('DOMAIN',$host_array[1] .'.'.$host_array[2]);

}

//针对com.cn域名

elseif(count($host_array) == 4) {

  define('DOMAIN',$host_array[1] .'.'.$host_array[2].'.'.$host_array[3]);

}

else{

  //echo "本系统不支持本地访问,请配置域名";exit;

}

define('DOMAIN_HOME','www.'. DOMAIN);

define('DOMAIN_YUN','yun.'. DOMAIN);

define('DOMAIN_API','api.'. DOMAIN);

define('DOMAIN_EMAIL','mail.'. DOMAIN);

define('DOMAIN_IMG','img.'. DOMAIN);

修改components部分,改变session作用域

 代码如下复制代码

'user'=> [

      'identityClass'=>'common\models\User',

      'enableAutoLogin'=> true,

      'identityCookie'=> ['name'=>'_identity','httpOnly'=> true,'domain'=>'.'. DOMAIN],

    ],

    'session'=> [

      'cookieParams'=> ['domain'=>'.'. DOMAIN,'lifetime'=> 0],

      'timeout'=> 3600,

    ],

通过上述配置后,多个二级域名间就可以实现同步登录和退出了。

小编推荐的这篇文章介绍了PHP使用preg_split()分割特殊字符(元字符等)的方法分析,非常实用,有兴趣的朋友快来看看吧。

本文实例讲述了PHP使用preg_split()分割特殊字符(元字符等)的方法。分享给大家供大家参考,具体如下:

这里所说的特殊字符就是正则中使用的特殊字符,如: | . + 等

其它的先不说,来个实例:

 代码如下复制代码

$pattern="/[,-\\|\\.]/";

$subject="aaa,bbb,ccc-ddd-eee-fff|ggg|hhh.iii.jjj.kkk";

$spr=preg_split($pattern,$subject);

print_r($spr);

结果:

Array ( [0] => [1] => [2] =>  [3] => [4] => [5] => [6] => [7] => [8] => [9] =>  [10] => [11] => [12] => [13] => [14] => [15] => [16]  => [17] => [18] => [19] => [20] => [21] => [22] =>  [23] => [24] => [25] => [26] => [27] => [28] => [29]  => [30] => [31] => [32] => [33] => [34] => [35] =>  [36] => [37] => [38] => [39] => [40] => [41] => [42]  => [43] => )

很显然,这不是我们想要的结果,郁闷了好一会,才找到是什么原因:

把正则表达式内的特殊字符放到前面就没事了, 也就是

$pattern="/[\\|\\.,-]/";

结果:

Array ( [0] => aaa [1] => bbb [2]  => ccc [3] => ddd [4] => eee [5] => fff [6] => ggg [7]  => hhh [8] => iii [9] => jjj [10] => kkk )

好了,这就是我们要的结果了

总结:当使用正则表达式中的元字符,普通字符进行 [ ]内的多个字符分割的时候,要把待转义的元字符放在前面.

本文详细介绍了用PHP的socket实现客户端到服务端的通信实例详解,非常实用,有兴趣的同学快来看看吧

一、server.php服务端:

 代码如下 复制代码

<?php

error_reporting(E_ALL);

set_time_limit(0);

ob_implicit_flush();

//本地IP

$address='localhost';

//设置用111端口进行通信

$port= 111;

//创建SOCKET

if(($sock= socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {

    echo"socket创建失败原因 ". socket_strerror($sock) ."\n";

}

  

if(($ret= socket_bind($sock,$address,$port)) < 0) {

    echo"创建套接字失败原因 ". socket_strerror($ret) ."\n";

}

//监听

if(($ret= socket_listen($sock, 5)) < 0) {

    echo"监听失败原因 ". socket_strerror($ret) ."\n";

}

do{

  //接收命令 

  if(($msgsock= @socket_accept($sock)) < 0) {

    echo"命令接收失败原因: ". socket_strerror($msgsock) ."\n";

    break;

  }

  $msg="\nPHP Test Server. \n"."用quit,shutdown,sun...等命令测试.\n";

  

  @socket_write($msgsock,$msg,strlen($msg));

  

  do{

    if(false === ($buf= @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {

        echo"socket_read() failed: reason: ". socket_strerror($ret) ."\n";

        break2;

    }

    if(!$buf= trim($buf)) {

        continue;

    }

    if($buf=='quit') {

        break;

    }

    if($buf=='shutdown') {

        socket_close($msgsock);

        break2;

    }

    if($buf=='sun') {

        echo'what are you doing?';

    }

    $talkback="Backinformation : '$buf'.\n";

    socket_write($msgsock,$talkback,strlen($talkback));

    echo"$buf\n";

  }while(true);

  

  socket_close($msgsock);

  

}while(true);

  

socket_close($sock);

?>

二、client.php客户端:

 代码如下 复制代码

<?php

error_reporting(E_ALL);

//端口111

$service_port= 111;

//本地

$address='localhost';

//创建 TCP/IP socket

$socket= socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if($socket< 0) {

    echo"socket创建失败原因: ". socket_strerror($socket) ."\n";

}else{

    echo"OK,HE HE.\n";

}

$result= socket_connect($socket,$address,$service_port);

if($result< 0) {

    echo"SOCKET连接失败原因: ($result) ". socket_strerror($result) ."\n";

}else{

    echo"OK.\n";

}

//发送命令

$in="HEAD / HTTP/1.1\r\n";

$in.="Connection: Close\r\n\r\n";

$out='';

echo"Send Command..........";

$in="sun\n";

socket_write($socket,$in,strlen($in));

echo"OK.\n";

echo"Reading Backinformatin:\n\n";

while($out= socket_read($socket, 2048)) {

    echo$out;

}

echo"Close socket........";

socket_close($socket);

echo"OK,He He.\n\n";

?>

这两段代码是简单介绍用PHP实现客户端和服务端的通信

具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..

再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....

本文介绍了详谈PHP中的密码安全性Password Hashing,非常实用,不会的同学可以参考一下

如果你还在用md5加密,建议看看下方密码加密和验证方式。

先看一个简单的Password Hashing例子:

 代码如下 复制代码

<?php

 

//require 'password.php';

/**

 * 正确的密码是secret-password

 * $passwordHash 是hash 后存储的密码

 * password_verify()用于将用户输入的密码和数据库存储的密码比对。成功返回true,否则false

 */

$passwordHash= password_hash('secret-password', PASSWORD_DEFAULT);

echo$passwordHash;

if(password_verify('bad-password',$passwordHash)) {

  // Correct Password

  echo'Correct Password';

}else{

  echo'Wrong password';

  // Wrong password

}

下方代码提供了一个完整的模拟的 User 类,在这个类中,通过使用Password Hashing,既能安全地处理用户的密码,又能支持未来不断变化的安全需求。

 代码如下 复制代码

<?php

classUser

{

  // Store password options so that rehash & hash can share them:

  constHASH = PASSWORD_DEFAULT;

  constCOST = 14;//可以确定该算法应多复杂,进而确定生成哈希值将花费多长时间。(将此值视为更改算法本身重新运行的次数,以减缓计算。)

 

  // Internal data storage about the user:

  public$data;

 

  // Mock constructor:

  publicfunction__construct() {

    // Read data from the database, storing it into $data such as:

    // $data->passwordHash and $data->username

    $this->data =newstdClass();

    $this->data->passwordHash ='dbd014125a4bad51db85f27279f1040a';

  }

 

  // Mock save functionality

  publicfunctionsave() {

    // Store the data from $data back into the database

  }

 

  // Allow for changing a new password:

  publicfunctionsetPassword($password) {

    $this->data->passwordHash = password_hash($password, self::HASH, ['cost'=> self::COST]);

  }

 

  // Logic for logging a user in:

  publicfunctionlogin($password) {

    // First see if they gave the right password:

    echo"Login: ",$this->data->passwordHash,"\n";

    if(password_verify($password,$this->data->passwordHash)) {

      // Success - Now see if their password needs rehashed

      if(password_needs_rehash($this->data->passwordHash, self::HASH, ['cost'=> self::COST])) {

        // We need to rehash the password, and save it. Just call setPassword

        $this->setPassword($password);

        $this->save();

      }

      returntrue;// Or do what you need to mark the user as logged in.

    }

    returnfalse;

  }

}

[!--infotagslink--]

相关文章

  • 浅析c# 线程同步

    这篇文章主要介绍了c# 线程同步的相关资料,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2020-08-29
  • MYSQL主从不同步延迟原理分析及解决方案

    1. MySQL数据库主从同步延迟原理。要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日...2013-10-04
  • 详解nginx同一端口监听多个域名和同时监听http与https

    这篇文章主要介绍了详解nginx同一端口监听多个域名和同时监听http与https的相关资料,需要的朋友可以参考下...2017-07-06
  • C#同步网络时间的方法实例详解

    这篇文章主要介绍了C#同步网络时间的方法,以实例形式较为详细的分析了C#获取网络时间与同步本机系统时间的相关技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • 检测mysql同步状态实现代码(php/linux)

    本文章介绍两个实例来介绍mysql同步状态检测实现程序有需要的朋友可参考一下。 代码如下 复制代码 #!/bin/sh #check MySQL_Slave St...2016-11-25
  • PHP JS Ip地址及域名格式检测代码

    PHP IP地址格式检测函数复制代码 代码如下:function checkIp($ip){ $ip = str_replace(" ", "", $ip); $ip = strtolower($ip); $ip= str_replace("http://", "", $ip); $ip= str_replace("https://", ""...2013-10-04
  • MySQL 5.5主从同步设置笔记分享

    先修改Master(10.1.123.197)的 my.cnf 配置在 [mysqld] 中新增以下内容:复制代码 代码如下:log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id = 1sync_binlog=1binlog_format=mixed然后指定要做同步的数据库,并...2014-05-31
  • VSCode 云同步扩展设置Settings Sync插件

    这篇文章主要介绍了VSCode 云同步扩展设置Settings Sync插件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-29
  • C#多线程及同步示例简析

    这篇文章主要为大家详细介绍了C#多线程及同步示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#域名解析简单实现方法

    这篇文章主要介绍了C#域名解析简单实现方法,可实现针对域名解析显示出主机名、IP地址、别名等功能,需要的朋友可以参考下...2020-06-25
  • C#实现多线程的同步方法实例分析

    这篇文章主要介绍了C#实现多线程的同步方法,实例分析了C#线程同步的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • vue data变量相互赋值后被实时同步的解决步骤

    这篇文章主要介绍了vue data变量相互赋值后被实时同步的解决步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • 2015新版godaddy域名续费与过期域名赎回期限及赎回方法

    有许多的新手朋友不知道gd如何续费及过期了域名如何购买回来了,今天我们就一起来看看2015新版godaddy域名续费与过期域名赎回期限及赎回方法吧。 2015新版godaddy...2016-10-10
  • 基于C# 写一个 Redis 数据同步小工具

    Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这篇文章主要介绍了用 C# 写一个 Redis 数据同步小工具,需要的朋友可以参考下...2020-06-25
  • Godaddy注册域名怎么转出到万网

    今天给域名续费的,实在找不到可以便宜的优惠码了,就干脆直接转到万网好了!!39¥比之前使用了优惠码的50多还便宜不少! 申请转出之前请大家务必注意两点问题: 1、之前购买...2016-10-10
  • php 怎么跨域写cookie实现同步登陆代码

    //加上 代码如下 复制代码 header('p3p: cp="cura adma deva ps教程ao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'); ...2016-11-25
  • godaddy域名转出西部数码图文详解

    godaddy域名转出西部数码要如何转呢,因为许多新顶级域名在国内许多服务商不支持,特别是高价域名更不支持了,下面我们来看godaddy域名转出西部数码的方法吧. 1、域...2016-10-10
  • Nginx批量添加二级子域名完美方案

    这篇文章主要介绍了Nginx批量添加二级子域名完美方案,本文讲解使用正则表达式批量匹配指定域名的二级域名虚拟主机,需要的朋友可以参考下...2016-01-27
  • docker内网搭建dns使用域名访问替代ip:port的操作

    这篇文章主要介绍了docker内网搭建dns使用域名访问替代ip:port的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-22
  • Oracle通过LogMiner实现数据同步迁移

    这篇文章主要介绍了Oracle通过LogMiner实现数据同步迁移的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-12-08