Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:使用基于Cookie的会话存储时未更新会话缓存_Python_Django_Session_Cookies_Django Settings - Fatal编程技术网

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

Python Django:使用基于Cookie的会话存储时未更新会话缓存,python,django,session,cookies,django-settings,Python,Django,Session,Cookies,Django Settings,我正在尝试使用Django会话来缓存一些数据。我的web应用程序中没有数据库,所以我使用基于cookie的存储机制。我只能第一次在会话中成功保存数据。从今以后,如果我尝试更新会话缓存,它将不起作用。以下是我的发现: prior_states = request.session.get(workflow_id, []) print "prior_state >>> ", prior_states if state_id in prior_states: request.s

我正在尝试使用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})
测试代码


提前谢谢

根据Django文件:

默认情况下,Django仅在会话启动时保存到会话数据库 已修改–即如果其任何字典值已修改 分配或删除

要更改此默认行为,请将SESSION_SAVE_EVERY_REQUEST设置设置为True。当设置为True时,Django将在每次请求时将会话保存到数据库中

请注意,会话cookie仅在创建或修改会话时发送。如果SESSION_SAVE_EVERY_请求为True,则会在每次请求时发送会话cookie


类似地,会话cookie的过期部分在每次发送会话cookie时都会更新。

之前的状态
永远不能是
如果会话中不存在,它将是空列表,因为您正在设置
默认值[]如果此处没有
请求.session.get(工作流id,[])
如果之前的状态为“无”,最好将此条件更改为
如果之前的状态为“无”:
您使用的是什么版本的Django?我使用的是Django 1.5.1Thanks。这一点很重要,因为在
request.session
中的dict更新与
request.session['alfa']={'bravo':42}
类似,除非每次使用
request.session.modified=True
session\u SAVE\u请求=True
,否则不会保存会话。
#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?
request.session.modified = True