如何在Express中读取Cookie的过期时间?
首先得明确:浏览器不会把Cookie的过期时间随请求发送给服务器,所以req.cookies(包括cookie-parser)根本拿不到这个信息——过期时间是浏览器本地维护的属性,用来判断是否要删除Cookie,不会出现在HTTP请求的Cookie头里。
给你两个可行的解决方案:
方案1:额外设置一个存过期时间的Cookie
把过期时间单独存在另一个Cookie里,和原Cookie保持相同的过期规则:
const expireDate = dayjs().add(1, "hour").toDate(); // 设置token的Cookie res.cookie("tokenCookie", token, { secure: false, httpOnly: true, expires: expireDate, }); // 同时设置存过期时间的Cookie res.cookie("tokenExpires", expireDate.getTime(), { secure: false, httpOnly: true, expires: expireDate, });
读取的时候直接从req.cookies里取:
const expireTimestamp = req.cookies.tokenExpires; const expireDate = new Date(parseInt(expireTimestamp));
方案2:把过期时间编码到Token里(如果用JWT)
如果你的token是JWT格式,直接把过期时间写入JWT的payload中,解析Token时就能拿到:
生成Token时:
const jwt = require('jsonwebtoken'); const expireSeconds = 3600; // 1小时 const token = jwt.sign( { // 你的业务数据 userId: 123 }, 'your-secret-key', { expiresIn: expireSeconds } );
解析Token时:
try { const decoded = jwt.verify(req.cookies.tokenCookie, 'your-secret-key'); // decoded.exp 是过期时间的时间戳(秒级),转成Date对象 const expireDate = new Date(decoded.exp * 1000); } catch (err) { // Token过期或无效的处理逻辑 }
内容的提问来源于stack exchange,提问作者JacobC
相关产品推荐
相关产品推荐

