首页 > 代码库 > Yii 实现SSO

Yii 实现SSO

第一步:
‘user‘=>array(
‘allowAutoLogin‘=>true,
‘autoRenewCookie‘ => true,
‘class‘=>‘WebUser‘,
‘stateKeyPrefix‘=>‘xxx‘,    //关键是这个设置,这里写存入session时键的前缀,需要共享登录状态的站点必须用一样的前缀。
),
 
第二步:
php配置(修改 php.ini)
更改 session.cookie_domain=.xxx.com(前面的点一定要填,否则无法登录)
更改之后,浏览器访问以.xxx.com结尾的域名时,会在将sessionid保存在xxx.com为域的cookie中。此cookie名称为PHPSESSID,此cookie的有效期为会话结束时。
 
按以上设置更改之后,进行了测试,却无法登录成功。
排查了多种原因后,依然无法解决问题。
终于多方折腾,最终,清除浏览器cookie神奇地解决了这个问题。
 
经分析
问题原因:
        由于之前存有 域为 ce.xxx.com,名为 PHPSESSID的Cookie(且命名为 cookie A)存放了session id。在login.xxx.com登录成功时浏览器又生成了域为xxx .com,名为PHPSESSID的Cookie(cookie B) 存放session id,并在此session id对应的session中存放了用户名、密码等信息。但是登录成功后跳转到ce.xxx.com时,由于cookie A 对应的域更匹配当前的域名, 于是ce.xxx.com就找cookie A的sessionid,然而此session id对应的session并没有用户名、密码等信息,于是 yii 就判断未登录,进而又跳转到了login.xxx.com。
 
问题解决方案:
        知道原因后就好解决了
        1. 可手动清除ce.xxx.com这个域的cookie;
        2. 由于保存session id 的cookie有效期为会话结束时,关闭浏览器后重新开启即可清除此cookie解决问题。
 
转一份cookie的介绍:
http://www.cnblogs.com/Darren_code/archive/2011/11/24/Cookie.html