【问题标题】:express cookie not set in response, not shown in next requestexpress cookie 未在响应中设置,未在下一个请求中显示
【发布时间】:2019-09-11 02:47:09
【问题描述】:

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

我在一个 localhost 端口上有一个 Web 应用程序,在另一个 localhost 上有一个简单的帮助程序,它运行一个带有几个端点的 Express NodeJS 应用程序。

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

设置

客户端对 express 应用程序进行基本的 GET ajax 调用(目前是 jQuery)。

我已经为会话 cookie 设置了http 限额:

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

我在express应用上设置了跨域请求:

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 调用中得到第二个响应“good - 2”。日志始终将会话显示为{}

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

更新

我刚刚想到尝试不使用 AJAX 调用。直接点击 URL 获取 cookie 并按预期保持会话。这可能会改变问题的动态。

【问题讨论】:

    标签: express session cookies cookie-session


    【解决方案1】:

    解决方法是使用 jsonp 请求/响应来获取 cookie 以传递 ajax 调用。真的跟快递没关系。

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

    【讨论】:

      猜你喜欢
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      • 2016-05-06
      • 2021-05-17
      相关资源
      最近更新 更多