Django会话变量重置

WTo*_*Toa 3 python django session-variables session-cookies

我有一个基于cookie的会话,我试图保存会话中存储的两个页面之间的数据,但存储在会话变量中的数据会保持休息状态.

一个例子是:

At Home page:
request.session['foo'] = []
request.session['foo'].append('bar')
print request.session['foo'] will yield ['bar']

On second page:
print request.session['foo'] will yield []
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样?

fal*_*tru 7

request.session['foo'].append('bar')不会影响会话.仅request.session['...'] = .../ del request.session['...']影响会话.

请尝试以下代码.

request.session['foo'] = ['bar']
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/dev/topics/http/sessions/#when-sessions-are-saved

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

# Session is modified.
request.session['foo'] = 'bar'

# Session is modified.
del request.session['foo']

# Session is modified.
request.session['foo'] = {}

# Gotcha: Session is NOT modified, because this alters
# request.session['foo'] instead of request.session.
request.session['foo']['bar'] = 'baz'
Run Code Online (Sandbox Code Playgroud)

在上面示例的最后一种情况中,我们可以通过在会话对象上设置modified属性来明确告诉会话对象它已被修改:

request.session.modified = True
Run Code Online (Sandbox Code Playgroud)

...