【问题标题】:Why are sessions not unique per browser window [duplicate]为什么每个浏览器窗口的会话不是唯一的[重复]
【发布时间】:2018-08-17 17:48:03
【问题描述】:

我是 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.

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

【问题讨论】:

  • 你应该使用一个新的私有窗口,flask 将会话保存在一个窗口之间共享的 cookie 中

标签: python http session flask


【解决方案1】:

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

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

但会话也可以基于 URL 重写。它不是在 cookie 中传输,而是作为请求参数传递的会话 ID。在过去,我在许多用户禁用 cookie 的情况下更为常见,但由于您现在几乎无法访问禁用 cookie 的网站,因此很少使用它。但它确实允许单个浏览器在不同窗口中对同一服务器进行不同的会话。可惜不知道flask是否支持。

【讨论】:

  • 感谢您的澄清。是否有其他方法可以识别唯一用户。
  • 我已将其标记为答案,因为没有直接的方法可以解决此问题。
猜你喜欢
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
相关资源
最近更新 更多