首页 > 其他分享 >Flask session cookie 失效在Safari中的解决方法

Flask session cookie 失效在Safari中的解决方法

时间:2024-09-10 11:23:27浏览次数:3  
标签:Flask app iOS session cookie Safari

Flask 会默认使用客户端会话管理,数据存储在浏览器的 cookie 中。这种方法通常在各种浏览器中工作良好,但有时可能会在 Safari 中遇到 session cookie 失效的问题,特别是使用了 iOS 或 macOS 上的 Safari。

这个问题常见的原因是 Safari 中的隐私设置,尤其是涉及到“防止跨站追踪”和第三方 cookie 的处理。Safari 默认可能会阻止 Flask session cookie 的写入或读取,从而导致 session 丢失。以下是一些解决方法:

Flask session cookie 失效在Safari中的解决方法_iOS

1、问题背景

最近在使用 Flask 开发 web 应用时,遇到了一个奇怪的问题:在 macOS 上运行 Flask 应用,所有浏览器都能正常设置 session cookie。但在 Windows 服务器上运行时,Safari(以及 iOS)却无法设置 session cookie,而其他浏览器仍然可以正常工作。

下面是一个简单的 Flask 应用示例,用来演示这个问题:

import os
import uuid
from flask import Flask, render_template, session

app = Flask(__name__)

SESSION_LIFETIME = 3600

@app.before_request
def before_request():
    # 创建 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")
            )
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Wubwub</title>
</head>
<body>
Jojo
</body>
</html>

为什么这个代码在所有浏览器上都能正常工作,但在 Safari 中却不行?而且,相同的代码在 macOS 上运行时(无论是在本地还是远程访问),都能正常工作,但是在 Windows 上却不行?其他所有浏览器在 Windows 上都能正常使用(即使是从外部访问)。

2、解决方案

经过排查,发现这个问题的原因是 Safari 和 iOS 对 cookie 的处理方式不同。Safari 和 iOS 会在默认情况下阻止第三方 cookie 的设置。而 Flask 默认使用第三方 cookie 来存储 session 数据。因此,在 Safari 和 iOS 中,Flask 的 session cookie 无法被设置。

要解决这个问题,有两种方法:

  1. 修改 Flask 的配置,使其使用第一方 cookie 来存储 session 数据。
  2. 在 Safari 和 iOS 中启用对第三方 cookie 的支持。

方法 1:修改 Flask 的配置

要修改 Flask 的配置,使其使用第一方 cookie 来存储 session 数据,可以在初始化 Flask 应用时,设置 session_cookie_samesite 参数为 'Lax'。如下所示:

app = Flask(__name__)

SESSION_LIFETIME = 3600

app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'

@app.before_request
def before_request():
    # 创建 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")
            )

方法 2:在 Safari 和 iOS 中启用对第三方 cookie 的支持

要在 Safari 和 iOS 中启用对第三方 cookie 的支持,可以按照以下步骤操作:

  1. 打开 Safari 浏览器。
  2. 点击“Safari”菜单。
  3. 选择“偏好设置”。
  4. 点击“隐私”选项卡。
  5. 在“阻止跨站点跟踪”下,选择“允许来自访问过的网站”。

这样,Safari 和 iOS 就会允许 Flask 设置 session cookie 了。

总结

这个问题的根本原因是 Safari 和 iOS 对 cookie 的处理方式不同。Safari 和 iOS 会在默认情况下阻止第三方 cookie 的设置。而 Flask 默认使用第三方 cookie 来存储 session 数据。因此,在 Safari 和 iOS 中,Flask 的 session cookie 无法被设置。

要解决这个问题,有两种方法:

  1. 修改 Flask 的配置,使其使用第一方 cookie 来存储 session 数据。
  2. 在 Safari 和 iOS 中启用对第三方 cookie 的支持。

通过这些步骤,应该可以有效解决 Safari 中 Flask session cookie 失效的问题。

标签:Flask,app,iOS,session,cookie,Safari
From: https://blog.51cto.com/u_13488918/11970048

相关文章

  • Tomcat Request Cookie 丢失问题
    优质博文:IT-BLOG-CN一、问题描述生产环境偶尔(涉及到多线程处理)出现"前端传递`Cookie为空"的告警,导致前端请求丢失,出现请求失败问题。告警内容如下前端传递Cookie为空告警内容:服务端获取requestCookie为空,请尽快处理!!!AppId:xxxxxxip:xx.xx.xxx.xx告警事件:2024-03-15......
  • [开题报告]flask框架基于Vue的电商管理系统(python+程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为全球经济的重要组成部分,极大地改变了人们的消费习惯和商业运营模式。电商平台的兴起,不仅为消费者......
  • [开题报告]flask框架基于Web安全的大学数学错题收集系统(python+程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在高等教育体系中,数学作为一门基础且重要的学科,其学习成效直接影响学生的专业素养与后续课程的掌握程度。然而,大学生在学习数学过程中普遍......
  • [开题报告]flask框架基于的郑州市网上生鲜商城设计与实现(python+程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为人们日常生活中不可或缺的一部分,尤其在食品消费领域,消费者对于便捷、高效、品质保证的生鲜购买渠......
  • [开题报告]flask框架基于架构的信息发布系统管理和运维的实现(python+程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在信息爆炸的时代,信息的高效发布与传播已成为企业获取市场竞争优势的关键因素之一。随着互联网的普及和技术的不断进步,信息发布系统作为连......
  • flask-docker更新(mysql更新为容器)
    前言之前用docker编写了一个flask的简单demo,但是里面的mysql用的本地的,当时是自己偷懒用了本地的,现在空余时间重新处理了mysql容器重新更新一下一、docker-compose.yml示例version:'3'services:flask:build:context:./appcontainer_name:flask......
  • 基于python+flask框架的月子会所管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着现代社会的快速发展和生活水平的提高,人们对母婴健康的重视程度日益增强。月子会所作为提供专业产后护理与恢复服务的机构,近年来在全球......
  • 基于python+flask框架的在线酒店管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和旅游业的蓬勃兴起,酒店行业正经历着前所未有的变革。传统酒店管理模式已难以满足市场快速响应和个性化服务的需......
  • 基于python+flask框架的社区居民信息管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,社区作为城市的基本单元,其管理与服务水平直接关系到居民的生活质量和社会稳定。传统的社区管理方式往往依赖于纸质档......
  • 基于python+flask框架的志羽·羽场管理与智能推荐系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全民健身热潮的兴起,羽毛球作为一项广受欢迎的运动项目,其场地需求日益增长。然而,传统羽场管理模式面临着诸多挑战,如场地利用率不均衡、......