Django:使用基于Cookie的会话存储时未更新会话缓存

时间:2014-06-10 17:44:33

标签: python django session cookies django-settings

我正在尝试使用Django Session来缓存一些数据。我的网络应用程序中没有数据库,所以我使用基于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?

提前致谢!

1 个答案:

答案 0 :(得分:1)

根据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的到期部分都会更新。