Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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 session.pop()不清除Cookie_Python_Session_Flask_Session Storage - Fatal编程技术网

Python session.pop()不清除Cookie

Python session.pop()不清除Cookie,python,session,flask,session-storage,Python,Session,Flask,Session Storage,我对Flask框架还不熟悉,正在尝试更好地学习它。我在沿途跟随教程 根据本系列中的教程,我坚持以下几点: 在本教程中,当用户通过点击/logout路径注销时,首先发生的事情是: session.pop('logged_in', None) 现在,根据上面提到的视频,当用户点击/logout路径时,cookie也会从浏览器中删除 现在这里有两个问题: 在我的例子中,使用与教程完全相同的设置,尽管会话可能会从服务器端失效,但在点击/logout路由后,cookie不会从浏览器中以任何方式被删除/更

我对Flask框架还不熟悉,正在尝试更好地学习它。我在沿途跟随教程

根据本系列中的教程,我坚持以下几点:

在本教程中,当用户通过点击
/logout
路径注销时,首先发生的事情是:

session.pop('logged_in', None)
现在,根据上面提到的视频,当用户点击
/logout
路径时,cookie也会从浏览器中删除

现在这里有两个问题:

  • 在我的例子中,使用与教程完全相同的设置,尽管会话可能会从服务器端失效,但在点击
    /logout
    路由后,cookie不会从浏览器中以任何方式被删除/更改。我做错什么了吗
  • session.pop(…)
    =>它将如何/为什么从前端(浏览器)删除某些内容。它只能控制服务器上的东西,不是吗
  • 下面是我的代码(取自教程本身),供您参考

  • 首先,会话和cookie是不同的。会话更像是发布到浏览器的唯一id,更像是后端字典的键。所以,大多数时候,当您更改会话(而不是会话id)时,您只需修改后端部分(通过该键在后端字典中添加或删除值)。不是浏览器的cookie
  • 你完全理解了。当您从会话服务器弹出“登录”时,服务器将记住此浏览器将不再登录
    所以这里使用cookie只是为了识别客户端浏览器。就是这样

    您可以将cookie的过期时间设置为0,这将使其无效

    @app.route('/logout')
    def logout():
        session.pop('token', None)
        message = 'You were logged out' 
        resp = app.make_response(render_template('login.html', message=message))
        resp.set_cookie('token', expires=0)
        return resp         
    

    这是有道理的,而且我理解如果我为cookie设置了过期时间,它将在过期后无效。然而,让我困惑的是,在视频中,cookie是如何被session.pop()删除的?有些东西似乎不合适!如果您深入了解flask,那么源代码会话字典将用于组成最终的HTTP响应对象。从会话字典中删除已登录的\u最终会设置要删除的cookie我知道cookie和会话是不同的。但是,在我们上面的例子中,除了识别浏览器之外,cookie似乎也是一个会话cookie。但让我困惑的是,视频中的cookie是如何被session.pop()删除的?你认为我或这段视频的作者(极不可能)遗漏了什么吗?我回应了同样的观察。尽管后端flask应用程序已弹出会话,但会话仍保留在浏览器中。因此我认为flask后端无法直接在浏览器中删除会话。我最好的猜测是,会话中可能需要指定一个超时?
    @app.route('/logout')
    def logout():
        session.pop('token', None)
        message = 'You were logged out' 
        resp = app.make_response(render_template('login.html', message=message))
        resp.set_cookie('token', expires=0)
        return resp