yii session共享

配置components项,如下:


'user'=>array(
//'class'=>'CWebUser',//你可以自定义你的Cwebuser
//'identityCookie'=>array('domain' => '.host.com','path' => '/'),//配置用户cookie作用域,其实这里不是最重要的
// enable cookie-based authentication
'allowAutoLogin'=>true,//允许同步登录
'stateKeyPrefix'=>'cnwin_',//你的前缀,必须指定为一样的
'loginUrl'=>array('/user/login'),
),
'session' => array(
//'sessionName' => 'PHPSESSID',
'cookieParams' => array('domain' => '.host.com', 'lifetime' => 0),//重点之处,配置会话ID作用域 生命期和超时,配置不正确可导致生成的PHPSESSIONID为子域名而非全局的
'class'=> 'CCacheHttpSession',
            'autoStart' => true,
            'cookieMode' => 'only',//这里千万不要指定cookieMode =>none,否则无法对应sessionid导致无法登录,更别说同步了。
            'timeout' => 1200
), 
'statePersister'=>array( //指定cookie加密的状态文件
'class'=>'CStatePersister',//指定类
),




以上配置可能会出现,使用登陆的那个域名,当页面跳转的时候会丢失session,用google浏览器抓包会发现
你使用的域名假如是 www.host.com 配置的域名为 .host.com。会发现cookie记录的值会有两个PHPSESSIONID
其他的子域名都是正常的 .host.com,出现的情况可能是yii识别了你设置的session共享,但是当你跳转页面的时候
yii自动把PHPSESSION 值设置为你当前域名,所以你登陆的session数据库保存在 .host.com中是取不到,打印
print_r($_SESSION) 会发现没有任何值。解决办法:
在你yii项目入口文件中重新设置一下session共享
session_set_cookie_params(0,'/','.host.com',false,true);

以上的配置最重要之处在于session组件的cookieParams参数。翻阅源代码CHttpSession.php发现,有这么一段方法:

public function setCookieParams($value)
{
$data=session_get_cookie_params();
extract($data);
extract($value);
if(isset($httponly))
session_set_cookie_params($lifetime,$path,$domain,$secure,$httponly);
else
session_set_cookie_params($lifetime,$path,$domain,$secure);
}

此处用到了session_get_cookie_params()函数,将此函数打印出来print_r( session_get_cookie_params())结果如下:

Array ( [lifetime] => 0 [path] => / [domain] => .host.com [secure] => [httponly] => ) 

看到这里,应该明白了吧!将我们在上面定义的session相关cookie参数进行覆盖,从而使我们定义的配置生效。
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值