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を使用します。この固有値は、現在のハッシュとアプリケーションのハッシュとして計算されます。ご覧のとおり、. これにより、シンボリック リンクが元の場所に解決されます。keyPrefixYii::app()->idIDbasePathnamesetBasePath()realpath()

そのため、シンボリック リンクのオリジンが変更されると、別のアプリケーション ID につながり、キャッシュ キーのプレフィックスも変更されます。これにより、キャッシュの内容が無効になります。

これを修正するには、次のいずれかを実行できます

  • id構成でアプリケーションに静的をmain.php設定する、または
  • コンポーネントに静的を設定keyPrefixしますmemcache

複数のサーバーがあり、すべてが同じ memcached プールにアクセスする必要がある場合は、とにかく後者をお勧めします。

于 2013-08-21T05:47:59.053 に答える