Flask 会话 cookie 未在 Safari 中设置

lak*_*erz 6 python safari session mobile-safari flask

我的会话 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")
            )
Run Code Online (Sandbox Code Playgroud)

以 test.html 为例:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Wubwub</title>
</head>
<body>
Jojo
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

为什么它可以在任何浏览器上运行,但不能在(重要的)Safari 上运行?为什么相同的代码在我的 mac 上运行时可以工作(从外部和本地访问),但在 Windows 上却不行?所有其他浏览器都可以在窗口上使用(甚至从外部)。

Sur*_*lwe 1

我有同样的行为,会话变量没有按预期工作。

所以我所做的就是删除会话使用,并使工作像我使用的会话一样list with key-value pair

首先初始化列表

 list_name = {'key1':'','key2':''};  and so on...
Run Code Online (Sandbox Code Playgroud)

并根据需要将变量存储在此列表中,并通过替换键在任意位置访问它

  • 这是一个丑陋的解决方法,但它确实有效。我真正的问题是为什么这种情况首先发生在 Safari 上 (2认同)