我在编码的session_data中拥有的是:
request.session['workspaceKey'] = "123f4b3106c740c1a54970a8b67d111d"
我所尝试的是(第一种方法):
sessionid = Session.objects.get(session_key=session_key)
sessionid.get_decoded()['workspaceKey'] = "8d7f4b3106c740c1a54970a8b67d111d"
但它没有更新workspaceKey是我现有的session_data
我尝试的另一种方法是:
request.session.modified = True
SESSION_SAVE_EVERY_REQUEST=False
同样不是更新workspaceKey是我现有的session_data。 我也尝试过以下关于上述方法的组合
session_key = request.data['sessionKey']
request.session['workspaceKey']= "somenewkey"
request.session.modified = True
sessionid = Session.objects.get(session_key=session_key)
session_data= sessionid.get_decoded()
print session_data
我的代码就像这样
'workspaceKey':'123f4b3106c740c1a54970a8b67d111d',
'_auth_user_hash': '7e024dd67ccb0e2aaab9ac1a92887109f7f020e4',
'_auth_user_id': '1',
'_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'
我在输出中的期望是(新的工作区密钥应该更新)
import $ from 'jquery';
import Simulate from 'jquery-simulate';
答案 0 :(得分:3)
您需要保存并在从db获取该会话并解码后,加密会话将为您提供更新的会话值。
尝试以下代码,以提供新的会话数据
from django.contrib.sessions.models import Session
session_key = request.data['sessionKey']
request.session['workspaceKey']= "somenewkey"
request.session.save()
session_obj = Session.objects.get(session_key=request.session.session_key).get_decoded()
print session_obj
答案 1 :(得分:3)
下面的代码完美地工作,以便更改django会话表的session_data。 重新编码 session_data的更新密钥提供更新的session_data.So关键点是解码后数据编码必须。
from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.db import SessionStore
workspaceKey ="123f4b3106c740c1a54970a8b67d111d"
session_key = request.data['sessionKey']
sessionid = Session.objects.get(session_key=session_key)
session_data= sessionid.get_decoded()
print session_data['workspaceKey']
session_data['workspaceKey']= workspaceKey
encoded_data = SessionStore().encode(session_data)
sessionid.session_data = encoded_data
sessionid.save()