为什么每个浏览器窗口的会话不唯一

时间:2018-03-09 07:48:46

标签: python http session flask

我是Python的新手,我正在尝试将ASP.NET应用程序转换为Python,以便我自己理解Python。

我选择FLASK作为Python应用程序的框架。

现在,在.NET中,我依靠会话来识别客户,但是,这似乎不适用于Python - Flask。

这是我的代码:

@APP.errorhandler(404)
def notFound(error):
    if (session.get("demo") == None):
        session["demo"] = "value"
        return "This is a new session."
    else:
        return "This is an existing session."

if __name__ == "__main__":
    APP.secret_key = APP.config["FLASK_SECRET_KEY"]
    APP.run(debug = APP.config["FLASK_DEBUG_MODE_ENABLED"])

但是,当我打开一个浏览器窗口并浏览到该路线时,我得到This is a new session.

当我打开另一个浏览器窗口并加载路线时,我得到This is an existing session.

怎么可能?会话不应该是每个用户唯一的吗? 提前感谢您的任何澄清。

1 个答案:

答案 0 :(得分:2)

这与Python松散相关,但在HTTP会话上更多。 HTTP最初设计为非连接协议。它的目的是向各种服务器发送请求并收集元素。通过cookie解决了跟踪客户端以允许相关请求流的需求。这就是为什么现在大多数会话实现依赖于cookie的原因。

问题是浏览器通常在所有窗口之间共享cookie。因此,会话是基于cookie的,同一浏览器的不同窗口将共享它,但它已经建立:那是你正在经历的。在这种情况下,您需要使用不同的浏览器来从同一客户端计算机上获得不同的会话。

但会话也可以基于URL重写。会话ID不是在cookie中传输,而是作为请求参数传递。在过去许多用户禁用cookie的过去,我曾经更常见,但由于你现在很难查阅带有禁用cookie的网站,因此很少使用它。但它确实允许单个浏览器在不同的窗口中具有到同一服务器的不同会话。不幸的是,我不知道烧瓶是否支持它。