每当我进入注册页面时,我都会收到此错误
Session data corrupted
当我尝试注册时,POST请求状态为302,但仍然创建了用户,但没有将任何电子邮件保存到注册用户。
为什么我会收到该错误,我该如何解决?
谢谢!
答案 0 :(得分:11)
很抱歉这篇文章迟到了,但是你有任何机会,你是否正在改变或者你是否更改了项目中的SECRET_KEY变量,以前的会话使用这个盐进行了加密,所以如果你改变了它,你的所有会话都会被破坏,这不是什么大问题,在此之前存在的会话需要再次登录
答案 1 :(得分:2)
由于以下行,您收到此错误:https://github.com/django/django/blob/master/django/contrib/sessions/backends/base.py#L109
显然,会话数据的加密出现了严重问题。
如何解决?我不确定,我有几点想法:
答案 2 :(得分:0)
这对我有用:
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'))
答案 3 :(得分:0)
有时,当您在同一运行时打开两个不同的项目时,可能会出现此问题。 因此,首先停止服务器,完全关闭并存在 现在再次打开ur服务器,并在新的运行时中启动当前项目