4

每次部署 Yii 应用程序时,我都会更改/var/www. 类似这样的东西

rm -f /var/www
ln -s /var/app-version /var/www

但是每次我这样做时,用户会话都会失效(即所有用户都被注销并且 CSRF 令牌被重置)。

对于我使用的会话CCacheHttpSession。类似下面的东西main.php

'components' => [
    'memcache' => [
        'class' => 'CMemCache',
        'servers' => [
            [
                'host' => 'localhost',
                'port' => 11211,
            ]
        ]
    ],
    'user' => [
        'class' => 'WebUser',
        'allowAutoLogin' => true,
    ],
    'session' => [
        'class' => 'CCacheHttpSession',
        'cacheID' => 'memcache'
    ]
]

我不确定这个错误配置是在 PHP 级别还是 Yii 级别,但我做错了什么?

4

1 回答 1

8

默认情况下CCache将使用keyPrefix包含Yii::app()->id. 此唯一ID性计算为当前basePath加上name应用程序的哈希值。如果您看一下setBasePath(),那它将使用realpath(). 这会导致符号链接被解析到它们的来源。

因此,如果您的符号链接的来源发生变化,这将导致不同的应用程序 ID,这又会导致缓存键前缀发生变化。这会使您的缓存内容无效。

要解决此问题,您可以

  • id在配置中的应用程序上设置静态main.php,或
  • keyPrefix在您的memcache组件上设置静态。

无论如何,如果您有多个服务器都应该访问同一个 memcached 池,则建议使用后者。

于 2013-08-21T05:47:59.053 回答