如何更新会话对象

时间:2016-11-13 07:59:06

标签: python html flask

有两个<a>

<a id="100" onclick="createTriggered(this.id)"<i></i> Click Link </a>
<a id="200" onclick="createTriggered(this.id)"<i></i> Click Link </a>

都链接到相同的onClick javascript函数:

<script type=text/javascript>
  $SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
  function onClick(id){
      var data = $.getJSON($SCRIPT_ROOT + '/triggered', {a:id} );
      window.alert({{ "session.keys()" }});
  }
</script> 

此javascript函数获取单击的<a> id并将其发送到flask函数:

@app.route('/onClick')
def onClick():
    session['a_id'] = request.args.get('a')
    return ('ok')

Flask功能获得id后,它会更新session对象,从而创建新密钥session['a_id']

最后,javascript window.alert用于检查session对象是否包含新的&#39; a_id&#39;应该已经由Flask函数设置的键。当弹出window.alert时,它会显示缺少新密钥。刷新页面并重新点击<a>链接会再次弹出window.alert(),但这次会显示新的session['a_id']密钥。看起来session对象的更新滞后了。我必须刷新页面,以便浏览器获取Flask功能所做的更改。有没有办法确保Flask函数对session对象所做的更新立即反映出来? 最后,因为我正在更新整个会话的全局session对象,所以我真的不想返回任何模板或重定向到另一个链接。我想要的只是Flask函数来设置session变量,因此它可以在逻辑的某个地方使用。在这种情况下,从Flask函数返回一个虚拟字符串是否可以?

1 个答案:

答案 0 :(得分:1)

  

看起来会话对象的更新滞后。

这不是滞后的。问题是,您最初在session中没有任何内容,因此您的HTML页面和您的javascript相当于 window.alert()

更新session后,重新呈现网页会将javascript代码更新为window.alert('a_id')

  

有没有办法确保Flask函数对会话对象所做的更新立即得到反映?

您可以检查您的javascript回调以检查Cookie返回。 Cookie已加密,因此除非您知道如何解密,否则您将看不到该值。不建议这样做。但是,至少可以看到cookie的值已更改。