3dsmax坐标轴变色修复办法
2026-07-16 3403754
2026-07-16 0
Safari登录反复提示“验证码过期”的根本原因是其默认阻止第三方Cookie导致session不一致;需关闭“阻止跨网站跟踪”和“防止指纹识别跟踪”,清理旧域名cookie,并通过URL携带或localStorage兜底传递JSESSIONID。

在Vue单页应用中用Safari登录时反复提示“验证码过期”或校验失败,根本原因不是后端没刷新验证码,而是Safari不保存session cookie导致前后端会话ID错位——第一次请求生成的session和第二次校验时发起的新会话根本对不上。
第一步:打开Safari → 顶部菜单栏点击「Safari」→「设置」→「隐私」。
第二步:关闭「阻止跨网站跟踪」开关,同时确保「防止指纹识别跟踪」也处于关闭状态。
第三步:在「Cookies和网站数据」区域点击「管理网站数据」→ 搜索当前项目域名 → 选中对应条目 → 点击「移除」→ 点击「完成」。
这一步必须做,【否则旧的无效session cookie仍会干扰新会话】。关闭隐私限制后,Safari才会把JSESSIONID这类关键cookie持久化到本地。
方法一:修改验证码图片请求地址,显式携带当前sessionID
将原本类似 loginIp + urlApi.imgCode 的请求路径,改为:
loginIp + urlApi.imgCode + (Cookies.get('JSESSIONID') == null ? '?a=' + new Date().getTime() : '?a=' + new Date().getTime() + '&JSESSIONID=' + Cookies.get('JSESSIONID'))
注意:这里依赖js-cookie库读取cookie,若未引入需先安装并import。
方法二:用localStorage兜底存储sessionID(当cookie被拦截时)
在登录页加载时执行:if (!Cookies.get('JSESSIONID') && localStorage.getItem('JSESSIONID')) Cookies.set('JSESSIONID', localStorage.getItem('JSESSIONID'), { expires: 7 });验证码请求前再同步一次:localStorage.setItem('JSESSIONID', Cookies.get('JSESSIONID'))。
如果前端无法修改,要求后端在生成验证码时,将JSESSIONID Cookie的HttpOnly属性设为false。
这能让JavaScript通过document.cookie读取到sessionID,从而手动注入后续请求头。
⚠️ 注意:【仅限内网或测试环境使用,生产环境开启HttpOnly是安全底线】。
打开Safari开发者工具(菜单栏「开发」→「显示Web检查器」)→ 切换到「网络」标签 → 刷新登录页 → 点击验证码图片请求 → 查看「请求标头」中是否包含 Cookie: JSESSIONID=xxx 字段。
再触发登录请求,确认该JSESSIONID值与上一步完全一致。