document.cookie中expires 格式设置问题导致部分iphone safari上登录失效

一、问题描述

设备信息:iPhone 12, iOS 16.3

昨天有个小伙伴发现自己的iPhone safari打开网页登录时,登录页面显示登录成功,但实际进入首页后仍然显示未登录。多次测试,该问题在该设备上属于必现问题。

二、问题排查与解决

经过排查发现:

并非所有iphone上都会出现该问题,比如:iPhone 7, iOS 15.3上就能正常登录显示。

通过代码走查,系统在登录页面登录成功后会将Token信息存储在cookie中,并在跳转首页时通过cookie中携带的token获取用户信息,只要存在用户信息则页面显示已登录状态。

那么,问题可能就出在cookie的设置上。

接下来,使用MacBook与问题机型进行联调,联调方法大致如下:

(1)在MacBook中打开safari,在safari浏览器->设置...->高级中勾选在菜单栏中显示"开发"菜单

(2)iPhone中打开设置,点击Safari浏览器->高级,打开网页检查器开关

(3)用数据线链接MacBook与iPhone,在MacBook 的 Safari顶部开发菜单中选择xxx的MacBook, 找到对应的网页打开调试即可。

以下是联调问题机型,查看最终设置的cookie的结果:

通过上述两张图可以发现,实际doment.cookie的设置代码与最终效果存在差异,主要体现在Pathexpires 两个属性值上。正确的设置效果应该类似下面的样子:

那么问题出在哪呢?Path作为字符串,格式设置上应该不会有什么问题,而expires 就不同了,它是有一定的格式要求的:

The cookie expiration date defines the time when the browser will automatically delete it (according to the browser's time zone).The date must be exactly in this format, in the GMT timezone. We can use date.toUTCString to get it. For instance, we can set the cookie to expire in 1 day:

// +1 day from now

let date = new Date(Date.now() + 86400e3);

date = date.toUTCString();

document.cookie = "user=John; expires=" + date;

对比代码,发现源代码少了toUTCString的调用。为了验证这个猜测,在登录页面联调时在Safari控制台直接运行测试代码:

运行后,进入首页正常显示登录状态,而此时的cookie审查也已正常设置:

至此,我们发现在iphone上如果document.cookie中expires 格式设置不正确会导致登录失效(当然,在比较早的机型上可能是正常的)

相关推荐
2501_915106322 小时前
App HTTPS 抓包 工程化排查与工具组合实战
网络协议·ios·小程序·https·uni-app·php·iphone
2501_916008894 小时前
金融类 App 加密加固方法,多工具组合的工程化实践(金融级别/IPA 加固/无源码落地/Ipa Guard + 流水线)
android·ios·金融·小程序·uni-app·iphone·webview
2501_915921434 小时前
Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
android·macos·ios·小程序·uni-app·自动化·iphone
游戏开发爱好者86 小时前
iOS 上架要求全解析,App Store 审核标准、开发者准备事项与开心上架(Appuploader)跨平台免 Mac 实战指南
android·macos·ios·小程序·uni-app·iphone·webview
00后程序员张7 小时前
混淆 iOS 类名与变量名的实战指南,多工具组合把混淆做成工程能力(混淆 iOS 类名变量名/IPA 成品混淆Ipa/Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview
不一样的故事1267 小时前
iPhone 17 Pro Max 的评测和用户反馈
数码相机·智能手机·iphone
2501_9160074710 小时前
iOS文件管理工具深度剖析,从系统沙盒到跨平台文件操作的多工具协同实践
android·macos·ios·小程序·uni-app·cocoa·iphone
青茶36010 小时前
iPhone苹果手机拍的照片默认是heic如何换成jpg格式
ios·智能手机·手机·iphone
2501_9159184112 小时前
Flutter 加固方案对比与实战,多工具组合的跨平台安全体系(Flutter App 加固/IPA 成品混淆/Ipa Guard CLI/自动化安全流程)
安全·flutter·ios·小程序·uni-app·自动化·iphone
Digitally13 小时前
如何将iPhone上的笔记传输到电脑
笔记·电脑·iphone