每当我在AppFog上更新我的应用程序时,所有登录的用户都会自动注销。
因为会话丢失了!
我该如何解决这个问题?
该应用程序在Yii Framework 1.1.14
之上构建了PHP
答案 0 :(得分:1)
问题是,Yii使用CApplication :: getId()来生成cookie ID。此方法使用basePath生成该ID。
return $this->_id=sprintf('%x',crc32($this->getBasePath().$this->name));
在部署新版本时,应用程序的基本路径会发生变化,因此会重新生成cookie ID并丢失会话。
解决方案是在protected / config / main.php中指定您自己的应用程序ID
"id" => md5(php_uname().'somHardGuessableRandomString'),
somHardGuessableRandomString部分应该是随机生成的。
答案 1 :(得分:0)
可能是由于会话或由于授权文件在更新期间被覆盖而导致..
参考:http://www.yiiframework.com/doc/api/1.1/CHttpSession#savePath-detail 和http://in2.php.net/manual/en/session.configuration.php#ini.session.save-path
默认情况下,授权临时文件存储在/protected/data/auth.php
中。
您可以通过指定这些文件的不同路径来避免这种情况,
会话文件默认为php会话保存路径,或将会话管理移动到DB。 this文章分别使用CDbHttpSession
代替CHttpSession
和CDbAuthManager
代替CPhpAuthManager
,更详细地解释了yii中的会话管理。
更可能是授权问题,因为应用程序,目录在更新期间被覆盖而不是系统tmp目录。如果您使用版本控制来更新应用程序,则可以将其配置为忽略此文件(.gitignore
或等效文件)。
答案 2 :(得分:0)
AppFof文件系统不是持久的。当您更新时,您正在将应用程序重建为基本上新的服务器,因此存储在文件系统中的任何内容都将丢失,包括会话文件。
可能唯一的解决方案是将会话详细信息保存到数据库中。