Django:使用基于Cookie的会话存储时会话缓存未更新
我正在尝试使用Django的会话功能来缓存一些数据。因为我的网页应用没有数据库,所以我使用基于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 个回答
2
根据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的过期时间部分也会被更新。