我的会话 cookie 遇到了奇怪的行为:在我的 Mac 上运行 Flask 应用程序,一切正常,并且在任何浏览器上都设置了 cookie。
但是,如果我在 Windows 服务器上运行它,会话 cookie 不会在 Safari(和 iOS)上设置 - 但仍然适用于任何其他浏览器。怎么会发生这种事呢?这是一个简单应用程序的示例:
import os
import uuid
from flask import Flask, render_template, session
app = Flask(__name__)
SESSION_LIFETIME = 3600
@app.before_request
def before_request():
# create session
if not session.get('uid'):
session.permanent = True
session['uid'] = uuid.uuid4()
@app.route('/', methods=['GET'])
def test():
return render_template('test.html')
if __name__ == "__main__":
app.secret_key = os.urandom(24)
app.permanent_session_lifetime = SESSION_LIFETIME
app.debug = True
app.run(threaded=True,
host="0.0.0.0",
port=int("5000")
)
示例 test.html:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Wubwub</title>
</head>
<body>
Jojo
</body>
</html>
为什么它可以在任何浏览器上运行,但不能在(重要的)Safari 上运行?为什么相同的代码在我的 mac 上运行时可以工作(从外部和本地访问),但在 Windows 上却不行?所有其他浏览器都可以在 Windows 上使用(甚至从外部)。
我有同样的行为,即会话变量没有按预期工作。
所以我所做的就是删除会话使用,并让工作像会话一样,我使用了
list with key-value pair
首先初始化列表
list_name = {'key1':'','key2':''}; and so on...
并根据需要将变量存储在此列表中,并通过替换键在任意位置访问它
我遇到了同样的问题,我所做的就是使用 python 设备检测器来检测 safari 浏览器并将我的会话设置为 {}。这是一个简单的代码。
from device_detector import DeviceDetector
browser = DeviceDetector(user_agent).parse()
if "Safari" in str(browser.client_name()):
session = {}