6

最近、Session オブジェクトに依存するショッピング カート コードを作成しました。匿名ユーザーのデータを保存するには、これが合理的な方法のように思われました。

一連のテストを行っているときに、厄介な問題に遭遇しました。ユーザーがチェックアウト プロセスの途中で (または単に他の製品を閲覧しているときに) サインインすると、Django が新しい session_key を発行し、セッション データにアクセスできなくなります。

古いセッション データを保持する方法はありますか? それとも、私の設計アプローチが間違っていますか?

4

3 に答える 3

3

cycle_key既存のものから継承し、メソッドをオーバーライドする独自の SessionBackend を作成してみてください。

1 あなたのsettings.py:

SESSION_ENGINE = 'my_app.session_backend'

2 my_app.session_backend.py:

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

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

cycle_keylogin認証後にビューで呼び出されています。

動作するかどうか教えてください ;)

于 2012-08-22T07:06:42.907 に答える
0

私は似たようなことをしようとしています。Django は を変更しsession_keyてセッション固定の脆弱性を軽減できるため、外部キーには適していません。もっと永続的なものが欲しい。したがって、永続的な識別子を に入れますrequest.session['visitor_id']

from django.utils.crypto import get_random_string
import string

VALID_KEY_CHARS = string.ascii_lowercase + string.digits

def example_view(request):
    if not request.session.get('visitor_id'):
        self.request.session['visitor_id'] = get_random_string(32, VALID_KEY_CHARS)
    # Now code the rest of the view, using the visitor_id instead of
    # session_key for keys in your model.
    # ...
于 2016-01-14T19:11:52.190 に答える