如何在 Django 中为键设置新值 Session_data

How to set new value for a key in Django Session_data

我在编码 session_data 中的内容是:

'workspaceKey':'8d7f4b3106c740c1a54970a8b67d156d', 
'_auth_user_hash': '7e024dd67ccb0e2aaab9ac1a92887109f7f020e4', 
'_auth_user_id': '1', 
'_auth_user_backend': 'django.contrib.auth.backends.ModelBackend'

我试过的是(第一种方法):

request.session['workspaceKey'] = "123f4b3106c740c1a54970a8b67d111d"

但它没有更新 workspaceKey 是我现有的 session_data

我尝试的另一种方法是:

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

我的代码是这样的

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'

您需要保存,然后从数据库中获取该会话并解码该加密会话将为您提供更新的会话值。

试试下面的代码,它会提供新的会话数据

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

为了改变 django 会话 table 的 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()