无法获取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 端设置的值吗?

0
3
双越
回复
WEX_
截图出来看一下。按理说 response headers 里有了 set-cookie ,那么 chrome 应该就有 cookie 了。
2019-07-24
共3条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4051 学习 · 2006 问题

查看课程