最近、データベースバックアップされたセッションからmemcached経由で保存されたセッションにpylibmcを使用して移行しました。ここでMemcache経由のDjangoセッション:手動でセッションキーを見つけることができません。
が私のキャッシュである、私のsettings.pyでSESSION_CACHE_ALIAS & SESSION_ENGINE
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
'LOCATION': ['127.0.0.1:11211'],
}
}
SESSION_CACHE_ALIAS = 'default'
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
すべてが舞台裏で正常に動作していると私はそれが新しいキャッシュシステムを使用していることがわかります。 pylibmcからget_stats()メソッドを実行すると、キャッシュ内の現在のアイテムの数が表示され、1になったことがわかります。
問題は、pylibmcを使用して手動でセッションを取得できません。 views.pyのリクエストセッションデータを検査する際に
:
def my_view(request):
if request.user.is_authenticated():
print request.session.session_key
# the above prints something like this: "1ay2kcv7axb3nu5fwnwoyf85wkwsttz9"
print request.session.cache_key
# the above prints something like this: "django.contrib.sessions.cache1ay2kcv7axb3nu5fwnwoyf85wkwsttz9"
return HttpResponse(status=200)
else:
return HttpResponse(status=401)
私はcache_keyを印刷するときSESSION_KEYことはなかったのに対し、それはデフォルトのKEY_PREFIXで印刷していることに気づきました。コード内のコメントを見て、私が何を意味するのか見てみましょう。
だから私は、「これらのキー名のいずれかが動作するはずです、[OK]を偉大な私はちょうど教育目的のために手動でセッションデータをつかんでみましょう。」、考え出し:
import pylibmc
mc = pylibmc.Client(['127.0.0.1:11211'])
# Let's try key "1ay2kcv7axb3nu5fwnwoyf85wkwsttz9"
mc.get("1ay2kcv7axb3nu5fwnwoyf85wkwsttz9")
うーんと何も起こらない、何のキーがそのことにより、存在しません名。さて、心配しないで、cache_keyを試してみましょう、それは間違いなく正しく動作するはずですか?
mc.get("django.contrib.sessions.cache1ay2kcv7axb3nu5fwnwoyf85wkwsttz9")
何ですか?どのように私はまだ何も戻ってきていないですか?私がテストするとき、私はそれが動作するかどうかを確認するためにランダムなキー値を設定して取得することにします。キーが存在することを確認するためにget_stats()を再度実行します。私はまた、実際に私のセッションが動作しているかどうかを確認するためにWebアプリケーションをテストします。これは、私が気付いていない別の命名規則があると結論づけます。
もしそうなら、正しい命名方式は何ですか?