php多域名共享登录信息,使用Yii框架开发的多子域名共享登录信息

在Yii框架中,由于默认的session键前缀导致不同子域名间session无法共享,从而影响用户登录状态的识别。解决方法是在所有子域名项目的配置文件main.php中设置相同的'id'或为'user'组件指定统一的'stateKeyPrefix',确保子域名间session键一致,实现登录状态的跨域同步。
摘要由CSDN通过智能技术生成

用Yii开发时,通过上述方式并不能在多个子域名间达到预期,因为通过Yii::app()->user设置的session,Yii框架会自动在key的前面添加"_keyPrefix"

CWebUser.phppublic function getState($key,$defaultValue=null)

{

$key=$this->getStateKeyPrefix().$key;

return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;

}

public function getStateKeyPrefix()

{

if($this->_keyPrefix!==null){

return $this->_keyPrefix;

}else{

return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId());

}

}

CApplication.phppublic function getId()

{

if($this->_id!==null)

return $this->_id;

else

return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name));

}

因为默认情况各子域名的路径和项目名不同,导致在A域名下登录,而在B子域名下无法识别己登录。

解决方案:

所有子域名项目中的main.php文件中设置相同的return array(

'id'=>'peter.com',

.......

);

或return array(

..........

'components'=>array(

'user'=>array(

// enable cookie-based authentication

'allowAutoLogin'=>true,

'stateKeyPrefix'=>'peter.com'

),

.....

)

);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值