web-dev-qa-db-ja.com

django

サインアップページにアクセスするたびに、このエラーが表示されます

Session data corrupted

とにかくサインアップしようとすると、POSTリクエストステータスは302ですが、ユーザーはまだ作成されていますが、登録ユーザーにメールを保存していません。

なぜそのエラーが発生するのですか?どうすれば修正できますか?

ありがとう!

16
gjivanya

この投稿に遅れて申し訳ありませんが、万が一、プロジェクトのSECRET_KEY変数を変更しましたか?以前はこのソルトを使用してセッションが暗号化されていたため、変更するとすべてのセッションが破損しますが、心配する必要はありません。大したことではありません。最悪のシナリオは、これより前に存在していたセッションの場合であり、それらは再度ログインする必要があります。それだけです;)

18

次の行が原因でこのエラーが発生します: https://github.com/Django/django/blob/master/Django/contrib/sessions/backends/base.py#L109

どうやら、セッションデータの暗号化にひどく問題があったようです。

それを修正する方法は?よくわかりませんが、いくつかのアイデアがあります。

  • カスタムセッションクラスを使用していますか?
  • 別のプロジェクトでDjangoセッションを使用していますか?
3

これは私のために働いた:

import base64
import hashlib
import hmac
import json

def session_utoken(msg, secret_key, class_name='SessionStore'):
    key_salt = "Django.contrib.sessions" + class_name
    sha1 = hashlib.sha1((key_salt + secret_key).encode('utf-8')).digest()
    utoken = hmac.new(sha1, msg=msg, digestmod=hashlib.sha1).hexdigest()
    return utoken


def decode(session_data, secret_key, class_name='SessionStore'):
    encoded_data = base64.b64decode(session_data)
    utoken, pickled = encoded_data.split(b':', 1)
    expected_utoken = session_utoken(pickled, secret_key, class_name)
    if utoken.decode() != expected_utoken:
        raise BaseException('Session data corrupted "%s" != "%s"',
                            utoken.decode(),
                            expected_utoken)
    return json.loads(pickled.decode('utf-8'))

s = Session.objects.get(session_key=session_key)
decode(s.session_data, 'YOUR_SECRET_KEY'))

クレジット: http://joelinoff.com/blog/?p=92

1
Rani

同じ実行時に2つの異なるプロジェクトを開くと、この問題が発生する場合があります。したがって、最初にサーバーを停止し、完全に閉じて存在します。次に、サーバーを再度開き、現在のプロジェクトを新しい新しいランタイムで開始します。

0
vijay Rajput