会话数据在django中被破坏

时间:2016-08-16 09:09:49

标签: python django session

每当我进入注册页面时,我都会收到此错误

Session data corrupted

当我尝试注册时,POST请求状态为302,但仍然创建了用户,但没有将任何电子邮件保存到注册用户。

为什么我会收到该错误,我该如何解决?

谢谢!

4 个答案:

答案 0 :(得分:11)

很抱歉这篇文章迟到了,但是你有任何机会,你是否正在改变或者你是否更改了项目中的SECRET_KEY变量,以前的会话使用这个盐进行了加密,所以如果你改变了它,你的所有会话都会被破坏,这不是什么大问题,在此之前存在的会话需要再次登录

答案 1 :(得分:2)

由于以下行,您收到此错误:https://github.com/django/django/blob/master/django/contrib/sessions/backends/base.py#L109

显然,会话数据的加密出现了严重问题。

如何解决?我不确定,我有几点想法:

  • 您是否使用自定义会话类?
  • 您是否在另一个项目中使用Django会话?

答案 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'))

信用到:http://joelinoff.com/blog/?p=920

答案 3 :(得分:0)

有时,当您在同一运行时打开两个不同的项目时,可能会出现此问题。 因此,首先停止服务器,完全关闭并存在 现在再次打开ur服务器,并在新的运行时中启动当前项目