Every time I deploy my Yii app, I change the symbolic link of the /var/www
. Something similar like this
rm -f /var/www
ln -s /var/app-version /var/www
But every time I do this, the user sessions got invalidated (i.e. all of the users got logged out and CSRF tokens were reset).
For the session I use CCacheHttpSession
. Something like below in the main.php
'components' => [
'memcache' => [
'class' => 'CMemCache',
'servers' => [
[
'host' => 'localhost',
'port' => 11211,
]
]
],
'user' => [
'class' => 'WebUser',
'allowAutoLogin' => true,
],
'session' => [
'class' => 'CCacheHttpSession',
'cacheID' => 'memcache'
]
]
I'm not sure whether this misconfiguration is in PHP-level or Yii-level, but what did I do wrong?
By default CCache
will use a keyPrefix
that contains Yii::app()->id
. This unique ID
is calculated as a hash of the current basePath
plus the name
of the application. If you look at setBasePath()
you see, that it will use the realpath()
. This causes symlinks to be resolved to their origin.
So if the origin of your symlink changes, this will lead to a different application ID, which again leads to a changed cache key prefix. And this invalidates your cache content.
To fix this, you can either
id
on the application in your main.php
configuration, orkeyPrefix
on your memcache
component.The latter is recommended anyway, if you have more than one server that all should access the same memcached pool.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With