Flask 会话 cookie 未在 Safari 中设置

问题描述 投票:0回答:2

我的会话 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 上使用(甚至从外部)。

python session safari flask mobile-safari
2个回答
1
投票

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

所以我所做的就是删除会话使用,并让工作像会话一样,我使用了

list with key-value pair

首先初始化列表

 list_name = {'key1':'','key2':''};  and so on...

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


0
投票

我遇到了同样的问题,我所做的就是使用 python 设备检测器来检测 safari 浏览器并将我的会话设置为 {}。这是一个简单的代码。

from device_detector import DeviceDetector

browser = DeviceDetector(user_agent).parse()        
if "Safari" in str(browser.client_name()):
    session = {}
       
        
© www.soinside.com 2019 - 2024. All rights reserved.