美文网首页程序员
python session 更新

python session 更新

作者: 鸟它鸟 | 来源:发表于2018-04-08 21:27 被阅读0次

python session 更新

在使用python的session的时候,我在xsession中定义了一个字典,首次字典内的值更新会正常的存储在浏览器的cookie中,但是在修改字典中的值后,再次访问session会发现访问出来的数据是未修改之前的

翻了一些资料,原因大概如下

  1. 首先我们知道,python的session是通过secret_key加密后存储到cookie中的,所以首次设置的值会直接存储在浏览器的cookie中
  • 如果是修改session直接映射的值,session还是可以识别到的,比如
@app.route('/sets')
def sets():
    session['test']=10
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/updates')
def updatas():
    session['test']=11
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/reads')
def reads():
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')
@app.route('/sets')
def sets():
    session['test']={'a':1,'b':2}
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/updates')
def updatas():
    session['test']['c']=3
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/reads')
def reads():
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')
  • 运行后再浏览器中访问
    • http://x.x.x.x:8080/sets 返回为{"a": 1, "b": 2}
    • http://x.x.x.x:8080/reads 返回为{"a": 1, "b": 2}
    • http://x.x.x.x:8080/updates 返回为{"a": 1, "c": 3, "b": 2}
    • http://x.x.x.x:8080/reads 返回为{"a": 1, "b": 2}
      这个就有点尴尬了,本来打算用session直接存储数据的,现在踩坑了.. 不我不会放弃的
      仔细一想,不确定对不对,大神看了求指点。session映射字典,映射的是字典的本身的标识,
      而不是具体字典中的数据,所以在更新字典内的数据时,字典本身不会发生变化,所以session
      无感知故session不更新客户端cookie中的数据。
      那么怎么解决呢?一个参数搞定session.modified = True,主动的告诉session这个
      数据有更新,看一下代码执行的反馈。
@app.route('/sets')
def sets():
    session['test']={'a':1,'b':2}
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/updates')
def updatas():
    session['test']['c']=3
    session.modified = True
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

@app.route('/reads')
def reads():
    return json.dumps(session['test'], ensure_ascii=False, encoding='UTF-8')

相关文章

网友评论

    本文标题:python session 更新

    本文链接:https://www.haomeiwen.com/subject/wramhftx.html