部署后,Yii memcache会话失效

Pet*_*rus 4 php yii

每次我部署我的Yii应用程序时,我都会更改其符号链接/var/www.像这样的东西

rm -f /var/www
ln -s /var/app-version /var/www
Run Code Online (Sandbox Code Playgroud)

但每次执行此操作时,用户会话都会失效(即所有用户都已注销并且CSRF令牌已重置).

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

'components' => [
    'memcache' => [
        'class' => 'CMemCache',
        'servers' => [
            [
                'host' => 'localhost',
                'port' => 11211,
            ]
        ]
    ],
    'user' => [
        'class' => 'WebUser',
        'allowAutoLogin' => true,
    ],
    'session' => [
        'class' => 'CCacheHttpSession',
        'cacheID' => 'memcache'
    ]
]
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*rtl 8

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

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

要解决这个问题,你也可以

  • idmain.php配置中的应用程序上设置静态,或
  • keyPrefixmemcache组件上设置静态.

如果你有多个服务器都应该访问同一个memcached池,那么无论如何都推荐使用后者.