Search code examples
node.jsreactjsexpresssessionexpress-session

Every time React sends request to Express, a new session is generated


I use React as a client to send request to Express with proxy and express-session set up. But every time React makes a request to Express server, a new session is created. So I checked Express alone by manually accessing to the same api url and it keep using the same session each time I refresh the page.

Project structure:

project-folder
 - client // React client with proxy set up
      + src
      + package.json
      + ...
 - server.js
 - package.json

Inside server.js:

const session = require('express-session');

let sessionConf = {
    name: 'aoid',
    secret: 'stackoverflow',
    resave: true,
    saveUninitialized: true,
    rolling: true,
    cookie: {
        httpOnly: false,
        secure: false,
        maxAge: 2000000
    }
};

app.use(session(sessionConf));

app.get('/api/prod', (req, res, next) => {
    let sessionId = req.sessionID;  // is generated each time React client send request, works fine with api alone!
    console.log(sessionId);

    if (!sessionId) return res.status(401).send('Unauthorized Error');
    res.status(200).send({ data });
});

Here is how React client send its request to Express:

let loadItems = async () => {
    const response = await fetch('/api/prod');
    const body = await response.json();

    if (response.status !== 200) throw Error(body.message);
    return body;
}

I think the problem comes from the misconfiguration between React and Express. Did anyone have this problem before?


Solution

  • fetch does not send cookie by default, you need to set it explicitly:

    fetch(url, {
      method: 'GET',
      credentials: 'include',
      // ...
    })