请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

无法获取cookie中的userid,从而导致无法获取 redis 中存储的数据,因为userid !== key

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;
}

请问这个问题怎么解决,谢谢

正在回答 回答被采纳积分+3

1回答

双越 2019-07-23 19:27:57

你看下 chrome 浏览器的开发者工具,Application 中的 cookie 中,有你 server 端设置的值吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 WEX_ #1
    Application 中没有 cookie
    回复 有任何疑惑可以回复我~ 2019-07-24 09:27:23
  • 提问者 WEX_ #2
    已解决,获取过期时间时,setTime写成了getTime,尴尬
    回复 有任何疑惑可以回复我~ 2019-07-24 10:15:24
  • 双越 回复 提问者 WEX_ #3
    截图出来看一下。按理说 response headers 里有了 set-cookie ,那么 chrome 应该就有 cookie 了。
    回复 有任何疑惑可以回复我~ 2019-07-24 10:16:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信