每次部署 Yii 应用程序时,我都会更改 /var/www
的符号链接(symbolic link)。类似的东西
rm -f /var/www
ln -s /var/app-version /var/www
但是每次我这样做时,用户 session 都会失效(即所有用户都被注销并且 CSRF token 被重置)。
对于 session ,我使用
CCacheHttpSession
。 main.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/