Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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 为什么每个浏览器窗口的会话不是唯一的_Python_Http_Session_Flask - Fatal编程技术网

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

Python 为什么每个浏览器窗口的会话不是唯一的,python,http,session,flask,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"

我是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"])
但是,当我打开一个浏览器窗口并浏览到路线时,我会看到
这是一个新的会话。

当我打开另一个浏览器窗口并加载路由时,我得到
这是一个现有会话。

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

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

问题在于浏览器通常在其所有窗口之间共享cookie。因此,如果会话是基于cookie的,那么同一浏览器的不同窗口将共享它,无论它是如何建立的:这就是您正在经历的。在这种情况下,您需要使用不同的浏览器从同一台客户机拥有不同的会话


但是会话也可以基于URL重写。它将会话id作为请求参数传递,而不是在cookie中传输。在过去,很多用户禁用了cookie,我的情况更为常见,但现在你几乎无法查询禁用了cookie的网站,所以很少使用cookie。但它确实允许单个浏览器在不同的窗口中与同一服务器进行不同的会话。很遗憾,我不知道flask是否支持它。

谢谢您的澄清。是否有其他方法可以识别唯一的用户。我将其标记为答案,因为没有直接的方法可以解决此问题。您应该使用新的专用窗口,flask将会话保存在cookie中,该cookie在窗口之间共享