当前位置: 首页 > news >正文

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

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

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

在这里插入图片描述

1、问题背景

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

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

import os
import uuid
from flask import Flask, render_template, sessionapp = Flask(__name__)SESSION_LIFETIME = 3600@app.before_request
def before_request():# 创建 sessionif not session.get('uid'):session.permanent = Truesession['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_LIFETIMEapp.debug = Trueapp.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 = 3600app.config['SESSION_COOKIE_SAMESITE'] = 'Lax'@app.before_request
def before_request():# 创建 sessionif not session.get('uid'):session.permanent = Truesession['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_LIFETIMEapp.debug = Trueapp.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 失效的问题。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • web前端-HTML常用标签(二)
  • 代理伺服器地址怎麼正確填寫-okeyproxy
  • 零基础国产GD32单片机编程入门(十九)红外避障传感器模块实战含源码
  • Android视频编辑:利用FFmpeg实现高级功能
  • LVM逻辑卷创建的完整过程
  • python-月份有几天
  • Win使用SSH
  • k8s Prometheus
  • flask下https教程
  • OpenGL Texture C++ 预览Camera视频
  • 一分钟了解网络安全风险评估!
  • 叠螺污泥脱水机的成本包括哪些方面
  • 2024年Ai智能绘画Stable Diffusion软件+整合包+保姆式教程
  • some TEM8 receptive words
  • 创新性处理Java编程技术问题的策略
  • [译] 怎样写一个基础的编译器
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • CSS3 变换
  • css系列之关于字体的事
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • HTTP请求重发
  • iOS 颜色设置看我就够了
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • oldjun 检测网站的经验
  • rabbitmq延迟消息示例
  • spring学习第二天
  • vue脚手架vue-cli
  • Vue小说阅读器(仿追书神器)
  • windows下使用nginx调试简介
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 简单易用的leetcode开发测试工具(npm)
  • 理清楚Vue的结构
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何使用 JavaScript 解析 URL
  • 如何用vue打造一个移动端音乐播放器
  • 使用parted解决大于2T的磁盘分区
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 王永庆:技术创新改变教育未来
  • 详解移动APP与web APP的区别
  • 运行时添加log4j2的appender
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # Redis 入门到精通(七)-- redis 删除策略
  • #AngularJS#$sce.trustAsResourceUrl
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C11) 泛型表达式
  • (CPU/GPU)粒子继承贴图颜色发射
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (十八)三元表达式和列表解析
  • (源码分析)springsecurity认证授权
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET 使用 XPath 来读写 XML 文件
  • .net对接阿里云CSB服务
  • .Net实现SCrypt Hash加密
  • /proc/interrupts 和 /proc/stat 查看中断的情况