Day 84

Sessions & Cookies

11 min
JavaScript 100 Days

Sessions server par user state store karte hain aur cookie se session ID client ko dete hain. JWT se alag — server session manage karta hai. Traditional web apps mein sessions use hoti hain.

Sessions with Express

express-session setup karo.

sessions.js
javascript
// npm install express-session
const session = require("express-session");

app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: {
    secure: process.env.NODE_ENV === "production", // HTTPS only in prod
    httpOnly: true, // JS access nahi kar sakta
    maxAge: 24 * 60 * 60 * 1000, // 1 day in ms
    sameSite: "strict"
  }
}));

// Login — session set karo
app.post("/login", async (req, res) => {
  const user = await User.findOne({ email: req.body.email });
  const match = await bcrypt.compare(req.body.password, user.password);
  
  if (!match) return res.status(401).json({ error: "Invalid" });
  
  req.session.userId = user._id;
  req.session.role = user.role;
  
  res.json({ message: "Logged in!" });
});

// Logout
app.post("/logout", (req, res) => {
  req.session.destroy(err => {
    if (err) return res.status(500).json({ error: "Logout failed" });
    res.clearCookie("connect.sid");
    res.json({ message: "Logged out!" });
  });
});

// Protected route
function isAuthenticated(req, res, next) {
  if (req.session.userId) return next();
  res.status(401).json({ error: "Please login" });
}

🎯 Practice Challenge

Session-based auth system banao — login, logout, session check. MongoDB mein sessions store karo (connect-mongo).