You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Internet Explorer 11跨会话Cookie不保存问题求助(Python站点)

IE11中Python SimpleCookie设置的Cookie跨会话丢失问题解决方案

我之前也踩过类似的IE11兼容性坑,结合你提供的排查信息和代码片段,问题大概率出在Cookie过期时间的格式上——IE11对expires字段的格式要求特别苛刻,尤其是时区标识部分。

问题根源分析

你当前代码里用PST作为时区缩写,但IE11并不识别这种非标准的时区标识,它只认GMT格式的时区标注。哪怕你设置了1年的有效期,IE11会因为无法解析时区,把这个Cookie当成会话Cookie处理,关闭浏览器就自动删除了。

具体修复方案

调整过期时间的生成逻辑,改用GMT标准格式输出即可,这里有两种可靠的实现方式:

方式1:将本地时间转换为GMT时间后格式化

import datetime

expiration = datetime.datetime.now() + datetime.timedelta(seconds=3600*24*365)
# 转换为UTC/GMT时间
expiration_gmt = expiration.astimezone(datetime.timezone.utc)
self.cookie[self.prepend + key] = data
self.cookie[self.prepend + key]['expires'] = expiration_gmt.strftime('%a, %d-%b-%Y %H:%M:%S GMT')
self.cookie[self.prepend + key]['domain'] = self.domain
self.cookie[self.prepend + key]['path'] = '/'

方式2:直接基于UTC时间生成过期时间

这种方式更简单,避免时区转换的潜在问题:

import datetime

# 直接用UTC时间计算有效期
expiration = datetime.datetime.utcnow() + datetime.timedelta(seconds=3600*24*365)
self.cookie[self.prepend + key] = data
self.cookie[self.prepend + key]['expires'] = expiration.strftime('%a, %d-%b-%Y %H:%M:%S GMT')
self.cookie[self.prepend + key]['domain'] = self.domain
self.cookie[self.prepend + key]['path'] = '/'

额外验证排查点

虽然你已经做了不少排查,但可以再确认这几点:

  • 如果你的网站是HTTPS协议,记得添加secure属性:self.cookie[self.prepend + key]['secure'] = 'True',IE11对HTTPS环境下的Cookie有严格限制,缺失该属性可能导致Cookie无法持久化。
  • 检查IE11的隐私设置:确保没有开启“退出浏览器时删除浏览历史记录”,这个设置会强制清除所有Cookie,哪怕你设置了过期时间。
  • 可以用IE11的开发者工具(F12)查看Cookie详情,确认expires字段显示的是正确的GMT时间,而不是会话过期。

验证修复效果

  1. 修改代码后重启服务,在IE11中访问网站并触发Cookie设置。
  2. 完全关闭IE11(包括后台运行的进程,避免浏览器驻留)。
  3. 重新打开IE11访问网站,通过开发者工具查看Cookie是否依然存在。

内容的提问来源于stack exchange,提问作者Easterndonut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:55:55