django.contrib.sessions.models.Session
のget_decoded
メソッドはに依存してdjango.contrib.sessions.backends.base.SessionBase.decode
います。これは、計算されたハッシュが予想されるハッシュと異なる場合(SuspiciousOperation
例外が発生する場合) 、空の辞書を返しValueError
ます。または、選択解除の例外があります。実際にはすべての例外をキャッチしますが、それがコードが失敗する理由です。
したがって、ハッシュチェック部分を除いて、これらすべてのコード呼び出しをまとめると、必要なものを取得できます。以下に、特定のセッションオブジェクトのデコードされたセッションデータが存在する場合にそれを提供する関数があります。
import base64
import pickle
from django.contrib.sessions.models import Session
from django.utils.encoding import force_unicode
def decode_session_data(session_key):
"""Decode the data in a session object stored under ``session_key``.
:param session_key: e.g. ``'1180b5ed42c2a3a5f217e35b755865da'``
:return: decoded session data
:rtype: :class:`dict`
"""
session_obj = Session.objects.get(pk=session_key)
session_data = force_unicode(session_obj.session_data)
encoded_data = base64.decodestring(session_data)
hash, pickled = encoded_data.split(':', 1)
return pickle.loads(pickled)
ソース:https : //gist.github.com/3982485、Djangoプロジェクトのソースコードに基づいています。