2012-12-20 37 views
8

私は認証された両方のユーザーに対してユーザーの製品選択を記録するDjangoアプリケーションを持っています。私の意図は、彼らが決定した場合、後で登録するユーザーと匿名のデータを関連付けることrequest.session.session_key変数を使用することで、ラこの記事:しかし認証時にdjangoのセッションキーが変更される

Django storing anonymous user data

、それはそうです、そのセッションキーの変更時にユーザーがログインします/レジスタに格納され、セッションキーをユーザーに関連付けることができなくなります。これはDjangoセッションフレームワークの正しい動作ですか?私が探している機能を実現するための堅実な方法はありますか?

ご迷惑をおかけして申し訳ございません。 settings.py

SESSION_ENGINE = 'youapp.session_backend'

ファイルsession_backend.pyのディレクトリyouappで

from django.contrib.sessions.backends.db import SessionStore as DbSessionStore 

class SessionStore(DbSessionStore): 
    def cycle_key(self): 
     pass 

とセッションしながらログイン

+0

は、[修正変更セッションキーDjangoのセッション]を見てみましょう11192904/django-sessions-changing-session-key-when-modified)を実行します。 –

+0

このセッションキーの変更は、セッションの固定に対する保護に多少役立ちます。それをオフにする前にそれを考慮してください。 – Mark

答えて

10

この具体的なケースでは、のnnmwareが動作する可能性があります。より良い方法があります。

cycle_keyの中で何もしないだけでなく、superメソッドを呼び出してセッションを保存する必要があります。

元のcycle_key関数を調べると、古いセッションのデータが新しいセッションにコピーされますが、実際には保存されないことがわかります。 SESSION_ENGINEは、モジュール(の.pyファイル)ではなく、バックエンドクラスを指していることをsettings.py

SESSION_ENGINE = 'yourapp.session_backend' 

チェックで

今、あなたの 'yourapp/session_backend.py' で次の操作を行います(http://stackoverflow.com/questions/:

from django.contrib.sessions.backends.db import SessionStore as DbSessionStore 

class SessionStore(DbSessionStore): 
    def cycle_key(self): 
     super(SessionStore, self).cycle_key() 
     self.save() 
3

後に変更されていないで

関連する問題