Yii 1.1.x下使用Redis做共享session的问题
2016-11-25 10:30
316 查看
问题说明
我在使用nginx + apache(php module)搭建应用集群,并使用redis 做共享session时会出现:已经登陆的用户在某个节点可以取到session信息但页面仍显示未登陆的情况。调试代码后发现:Yii 1.1.x会基于应用路径去生成session key的前缀,而我的环境是一个应用节点部署在windows下,另一个是部署在ubuntu下,导致生成的session key会不同,从而只有一个节点可以取到登陆信息,其他节点则认为其未登陆总结
Yii 使用基于应用路径去生成session key的前缀是为了避免同一网站下不同Yii应用产生session覆盖在Yii应用集群环境中,应用要统一部署到相同路径下或者负载均衡软件使用客户端IP绑定策略(如使用nginx的ip_hash指令)
部署说明
192.168.171.111(windows 10) nginx 1.10.2 apache 2.2(php5 module) 192.168.171.129(ubuntu 14.04) apache 2.4(php5 module) Redis 2.28
nginx 配置信息
upstream web-server { #ip_hash; server 192.168.171.111:8801; server 192.168.171.129:8801; }
代码说明
CWebUser.php
public function getStateKeyPrefix() { if($this->_keyPrefix!==null) return $this->_keyPrefix; else return $this->_keyPrefix=md5('Yii.'.get_class($this).'.'.Yii::app()->getId()); //return $this->_keyPrefix=md5('Yii.'.get_class($this)); }
CApplication.php
public function getId() { if($this->_id!==null) return $this->_id; else return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name)); }
相关文章推荐
- Redis学习笔记(七)nginx+tomcat反向代理下使用tomcat-redis-session-manager进行session共享中值得注意的一个问题
- 使用nginx搭建集群tomcat8,redis实现session共享,文件共享问题
- 使用Tomcat+Redis来实现集群部署中的Session共享问题
- 使用Tomcat+Redis来实现集群部署中的Session共享问题
- 使用redis解决tomcat6在nginx负载下多节点共享session问题
- 使用nginx搭建集群tomcat8,redis实现session共享,文件共享问题
- 使用nginx搭建集群tomcat8,redis实现session共享,文件共享问题
- 使用redis解决tomcat6在nginx负载下多节点共享session问题
- 使用redis集群+tomcat缓存共享下session丢失问题产生原因以及解决
- 使用Tomcat+Redis来实现集群部署中的Session共享问题
- nginx+tomcat反向代理下使用tomcat-redis-session-manager进行session共享中值得注意的一个问题
- laravel5.3使用redis管理session解决session共享问题
- 分布式中使用Redis实现Session共享(二)
- 分布式中使用Redis实现Session共享(一)
- 好久没有写博客了,今天来一片php使用redis共享session
- spring-session,利用redis存储session,解决集群共享session的问题
- 分布式中使用Redis实现Session共享
- ASP.NET MVC 使用Redis共享Session
- 分布式中使用 Redis 实现 Session 共享(中)
- 使用nginx做负载均衡造成的session共享问题