我正在尝试使用Django会话来缓存一些数据。我的Web应用程序中没有数据库,因此我正在使用基于cookie的存储机制。我仅能够第一次成功将数据保存在会话中。此后,如果我尝试更新会话缓存,它将无法正常工作。这是我发现的:
prior_states = request.session.get(workflow_id, [])
print "prior_state >>> ", prior_states
if state_id in prior_states:
request.session.update({workflow_id: prior_states[:prior_states.index(state_id) + 1]})
else:
prior_states.append(state_id)
request.session.update({workflow_id : prior_states})
测试码
#1st request:
print request.session.get(1) --> None
request.session[1] = [101] --> works
print request.session.get(1) --> [101]
#2nd request:
print request.session.get(1) --> [101]
request.session[1] = [101, 102] --> works
print request.session.get(1) --> [101,102]
#3rd request:
print request.session.get(1) --> [101] --> Can't follow why?
提前致谢!
最佳答案
根据Django文档:
https://docs.djangoproject.com/en/1.6/topics/http/sessions/#when-sessions-are-saved
默认情况下,Django仅在会话时保存到会话数据库
已被修改-也就是说,如果其任何词典值都已被修改
分配或删除
request.session.modified = True
若要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置设置为True。设置为True时,Django将在每次单个请求时将会话保存到数据库。
请注意,仅在创建或修改会话后才发送会话cookie。如果SESSION_SAVE_EVERY_REQUEST为True,则将在每个请求上发送会话cookie。
同样,每次发送会话cookie时,会话cookie的过期部分都会更新。