ReactJS与Django API项目中Cookie过期日期设置异常(显示1969年)求助
我之前也踩过这个一模一样的坑!核心问题出在浏览器对document.cookie的expires参数格式要求上——它只认GMT格式的日期字符串,但你的Django后端返回的是ISO 8601格式的日期(比如"2018-04-29T17:00:00.000Z"),浏览器解析不了这种格式,就会默认把Cookie标记为已过期,也就是Unix纪元的前一秒(1969年12月31日)。
下面给你两种靠谱的解决办法:
方法一:把ISO日期转成GMT格式字符串
直接利用JavaScript的Date对象转换格式就行,步骤很简单:
- 把后端返回的ISO日期字符串转换成
Date实例 - 用
toUTCString()方法把日期转成GMT格式
修改后的代码如下:
// 从API响应中解构出token和expires const { token, expires } = response; // 转换日期为GMT格式 const gmtExpires = new Date(expires).toUTCString(); // 设置Cookie,建议加上path=/确保全站可用 document.cookie = `token=${token};expires=${gmtExpires};path=/`;
方法二:用max-age代替expires(更推荐)
max-age参数接受的是Cookie的有效时长(单位:秒),不需要处理复杂的日期格式,兼容性也很好。你可以直接计算出当前时间到过期时间的秒数:
const { token, expires } = response; const expiresDate = new Date(expires); // 计算剩余有效秒数,取整避免小数问题 const maxAge = Math.floor((expiresDate.getTime() - Date.now()) / 1000); // 设置Cookie document.cookie = `token=${token};max-age=${maxAge};path=/`;
设置完之后,你可以打开浏览器开发者工具(Application -> Cookies)检查一下,Cookie的过期时间应该就正常显示了。
内容的提问来源于stack exchange,提问作者reisdev
相关产品推荐
相关产品推荐

