Destroy and start new session without loggin out express js

A clever question!

In Express.js, you can't directly "destroy" a session without logging out, as the session is tied to the user's authentication state. However, you can achieve a similar effect by invalidating the session and starting a new one. Here are a few approaches:

Method 1: Using destroy and clearCookie

You can use the destroy method to invalidate the session and then use clearCookie to remove the session cookie.

app.get('/destroy-session', (req, res) => {
  req.session.destroy((err) => {
    if (err) {
      console.error(err);
      res.status(500).send('Error destroying session');
    } else {
      res.clearCookie('express.sid');
      res.redirect('/'); // redirect to a new session
    }
  });
});

Method 2: Using destroy and res.locals

You can use destroy to invalidate the session and then set res.locals to an empty object to effectively start a new session.

app.get('/destroy-session', (req, res) => {
  req.session.destroy((err) => {
    if (err) {
      console.error(err);
      res.status(500).send('Error destroying session');
    } else {
      res.locals = {};
      res.redirect('/'); // redirect to a new session
    }
  });
});

Method 3: Using a custom middleware

You can create a custom middleware that checks for a specific condition (e.g., a specific query parameter) and invalidates the session if true.

app.use((req, res, next) => {
  if (req.query.destroySession) {
    req.session.destroy((err) => {
      if (err) {
        console.error(err);
        res.status(500).send('Error destroying session');
      } else {
        res.clearCookie('express.sid');
        res.redirect('/'); // redirect to a new session
      }
    });
  } else {
    next();
  }
});

In all cases, the user will be redirected to a new session after the old one is destroyed. Note that the destroy method will not remove the session data from the server; it will only invalidate the session and remove the session cookie from the client's browser.