如何克服Session.get_decoded哈希检查?

时间:2012-10-30 20:05:07

标签: django pickle django-sessions

使用Django会话时,在某些情况下,无法使用django.contrib.sessions.models.Session的{​​{1}}方法解码存储在数据库中的编码会话数据,即它将始终返回空字典。

有没有办法解码这些数据?

它依赖于get_decoded的{​​{1}}方法,如果计算的哈希值与预期的哈希值不同(它会引发django.contrib.sessions.backends.base.SessionBase异常),它将返回一个空字典。

1 个答案:

答案 0 :(得分:3)

django.contrib.sessions.models.Session' get_decoded方法依赖于django.contrib.sessions.backends.base.SessionBase.decode,如果计算出的哈希值与预期哈希值不同,则会返回空字典(它会引发{{1}异常),有SuspiciousOperation或unpickling异常。它会真正捕获所有异常,但这些是代码失败的原因。

因此,除了哈希检查部分之外,将所有这些代码调用包装在一起,您就可以获得所需的内容。下面是一个函数,它将为您提供某个会话对象的已解码会话数据,前提是它存在。

ValueError

来源:https://gist.github.com/3982485, 基于Django project

的源代码