• 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
     
  • 相关阅读:
    asp.net 获得域名,端口,虚拟目录[转]
    在EntityFramework6中执行SQL语句【转】
    Ingress 访问日志分析与监控
    kubernetes之secret
    ingress Whitelisting白名单机制
    Kubernates之从pod中拷贝文件到宿主机
    kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
    npm 私服工具verdaccio 搭建
    nvm安装、解决nvm command not found问题、卸载
    k8s Pod 扩容和缩容
  • 原文地址:https://www.cnblogs.com/shengrui/p/3866037.html
Copyright © 2020-2023  润新知