AppFog:每次更新应用程序时,所有用户都会自动注销

时间:2014-04-15 08:41:34

标签: php yii appfog

每当我在AppFog上更新我的应用程序时,所有登录的用户都会自动注销。

因为会话丢失了!

我该如何解决这个问题?

  

该应用程序在Yii Framework 1.1.14

之上构建了PHP

3 个答案:

答案 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-detailhttp://in2.php.net/manual/en/session.configuration.php#ini.session.save-path

默认情况下,授权临时文件存储在/protected/data/auth.php中。

您可以通过指定这些文件的不同路径来避免这种情况, 会话文件默认为php会话保存路径,或将会话管理移动到DB。 this文章分别使用CDbHttpSession代替CHttpSessionCDbAuthManager代替CPhpAuthManager,更详细地解释了yii中的会话管理。

更可能是授权问题,因为应用程序,目录在更新期间被覆盖而不是系统tmp目录。如果您使用版本控制来更新应用程序,则可以将其配置为忽略此文件(.gitignore或等效文件)。

答案 2 :(得分:0)

AppFof文件系统不是持久的。当您更新时,您正在将应用程序重建为基本上新的服务器,因此存储在文件系统中的任何内容都将丢失,包括会话文件。

可能唯一的解决方案是将会话详细信息保存到数据库中。