未设置快速Cookie,未在下一个请求中显示

时间:2019-04-21 18:13:01

标签: express session cookies cookie-session

有几个运动部件,所以很难在这里知道要调试什么。

我在一个本地主机端口上有一个Web应用程序,而在另一个本地主机上有一个简单的帮助程序,运行一个带有两个端点的Express NodeJS应用程序。

我看到的一个基本问题是,我在Express应用程序上的cookie会话对于以后的调用是空的,我什至看不到它在第一个响应中被发回。

设置

客户端对快速应用程序进行基本的GET ajax调用(此刻为jQuery)。

我为会话Cookie设置了http的配额:

app.use(cookieSession({
  name: 'session',
  keys: ['abcdefg'],
  maxAge: 24 * 60 * 60 * 1000, // 24 hours,
  secure: false
}))

我在快速申请中设置了跨域请求:

app.use((req, res, next) => {
    const corsWhitelist = [
        'http://localhost:8000',
        'http://localhost:8777'
    ];
    if (corsWhitelist.indexOf(req.headers.origin) !== -1) {
        res.header('Access-Control-Allow-Origin', req.headers.origin);
        res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    }

    next();
});

请求完成似乎没有问题,因为响应主体正是我所期望的。

请求处理程序的实质是:

app.get('/initialize', (req, res) => {
    console.log(req.session);

    //if we have a session with verified status 
    if (req.session.hasOwnProperty("userId") && req.session.userId){
        res.send({result: 'OK', message: 'good - 1'});
        return;
    }

    const id = uuid.v4();
    req.session.userId = id;
    res.send({result: 'OK', message: 'good - 2'});
    return;
});

我总是总是从ajax调用中获得第二个响应“好-2”。日志始终将会话显示为{}

可能值得注意的是,Chrome devtools为请求标头显示“已显示临时标头”,而在响应标头中未显示set-cookie。 AJAX是通过一个参数传入端点的简单GET。

更新

现在我想到不使用AJAX调用即可尝试。直接点击URL即可获取Cookie,并使会话保持预期的状态。这可能会改变问题的动态。

1 个答案:

答案 0 :(得分:0)

解决方法是使用jsonp请求/响应使cookie传递给ajax调用。真的与快递无关。

https://samueleresca.net/2015/07/json-and-jsonp-requests-using-expressjs/