每次部署 Yii 应用程序时,我都会更改 /var/www 的符号链接(symbolic link)。类似的东西

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

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

对于 session ,我使用 CCacheHttpSessionmain.php 中的类似内容
'components' => [
    'memcache' => [
        'class' => 'CMemCache',
        'servers' => [
            [
                'host' => 'localhost',
                'port' => 11211,
            ]
        ]
    ],
    'user' => [
        'class' => 'WebUser',
        'allowAutoLogin' => true,
    ],
    'session' => [
        'class' => 'CCacheHttpSession',
        'cacheID' => 'memcache'
    ]
]

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

最佳答案

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

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

要解决此问题,您可以

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

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

    关于php - Yii memcache session 在部署后失效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18348895/

    10-13 09:48