无法获取cookie中的userid,从而导致无法获取 redis 中存储的数据,因为userid !== key
来源:7-14 session存入redis
WEX_
2019-07-23
res.setHeader('Set-Cookie', `userid=${userId}; path=/; httpOnly; expires=${getCookieExpires()}`)
上述代码设置了cookie的userid,设置的cookie位置在Response Header中的Set-cookie,呈现的结果如下图:
const cookieStr = req.headers.cookie || ''
而上述代码获取的cookie只是Request Hearders中的cookie,从而无法获取Response Header 中Set-cookie,所以无法获取到userid,因此如下代码userid每次都会初始化
// 解析 session (使用redis)
let needSetCookie = false;
let userId = req.cookie.userid;
console.log('userId', userId)
if(!userId) {
needSetCookie = true;
userId = `${Date.now()}_${Math.random()}`;
// 初始化 redis 中 session 的值
set(userId, {});
}
从而造成了redius获取前边set的数据为空对象,因为key的值每次都不一样:
function get(key) {
const promise = new Promise((resolve, reject) => {
redisClient.get(key, (err, val) => {
console.log('key 值', key); // key 每次都是一个新值,所以redis储存的数据获取不到
console.log('get出来的值:', val) // val为 {}
if(err) {
reject(err);
return
}
if(val == null) {
resolve(null);
return
}
try{
resolve(
JSON.parse(val)
)
}catch(ex) {
resolve(val)
}
})
})
return promise;
}
请问这个问题怎么解决,谢谢
写回答
1回答
-
双越
2019-07-23
你看下 chrome 浏览器的开发者工具,Application 中的 cookie 中,有你 server 端设置的值吗?
032019-07-24
相似问题