読者です 読者をやめる 読者になる 読者になる

Django 1.5.3以降で変更されたセッションのシリアライズについて

Djangoのセッションデータは、settings.SESSION_ENGINEで指定されたクラスによって保存されます。
Django 1.5.3より前のバージョンでは、セッションデータのオブジェクトをシリアライズ、デシリアライズする処理は、ここで指定されるバックエンドクラスに任されていました。
デフォルトでは、pickleモジュールでダンプして、ハッシュ値+base64エンコードした文字列になっていました。
Django 1.5.3以降では、このpickleモジュールでダンプしていた部分が分離され、新たにsettings.SESSION_SERIALIZERという設定項目が追加されました。
SESSION_SERIALIZER
Django 1.5.3以降の1.5系では、settingsにSESSION_SERIALIZERを指定しない場合は従来通りpickleモジュールが使用されます。
また、Django 1.6では、デフォルトのシリアライザが、jsonモジュールを使ってダンプするJSONSerializerに変更されました。

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'

JSONSerializerの場合、jsonモジュールのdumpsでシリアライズできないオブジェクトをセッションに入れると、保存できずエラーになります。
例えば、Pythonのobjectクラスを継承したインスタンスや、その他jsonモジュールが対応していない値の型、データ構造などが該当します。
Django 1.6以降で従来通り、Pythonの任意のオブジェクトを保存したい場合は、settings.SESSION_SERIALIZERにPickleSerializerを指定するとよいでしょう。

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'

Python以外で作られた別のシステムと連携するのであれば、pickleデータは扱いづらい可能性が高いので、JSONSerializerを使うか、その他自前でシリアライザを作成するとよいでしょう。