Session Based Authentication
Session-Based Authentication in Express.js
Express.js এ traditional & secure Session-Based Authentication সিস্টেম ব্যাখ্যা করা হলো সহজ ভাষায়।
🔷 Session-Based Authentication কী?
ওয়েব অ্যাপ্লিকেশনে user যখন login করে, server তার জন্য একটি session তৈরি করে। এই session এ user সম্পর্কিত তথ্য (যেমন userId) store থাকে এবং user যখনই নতুন request পাঠায়, browser একটি session ID cookie পাঠায় যা দিয়ে server user কে চিনে ফেলে।
🔷 Session Flow (Step-by-Step)
- User login → server user verify করে
- Server session তৈরি করে
- Server → browser এ sessionID cookie পাঠায়
- Client প্রতিটি request এ cookie পাঠায়
- Server cookie দেখে user কে identify করে
🔷 Install Required Packages
npm install express-session connect-mongo bcryptjs dotenv
🔷 Session Setup in Express.js
Session store হিসাবে MongoDB ব্যবহার করা হলো:
const session = require("express-session");
const MongoStore = require("connect-mongo");
app.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000 * 60 * 15, // 15 minutes
httpOnly: true,
},
store: MongoStore.create({
mongoUrl: process.env.MONGO_URI,
collectionName: "sessions"
})
}));
🔷 User Login & Create Session
app.post("/login", async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user) return res.status(400).json({ message: "User not found" });
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) return res.status(400).json({ message: "Incorrect password" });
req.session.user = {
id: user._id,
email: user.email
};
res.json({
message: "Login successful",
user: req.session.user
});
});
🔷 Authentication Middleware
এই middleware দিয়ে protected routes secure রাখা হয়:
const isAuthenticated = (req, res, next) => {
if (!req.session.user) {
return res.status(401).json({ message: "Not authenticated" });
}
next();
};
🔷 Protected Route Example
app.get("/profile", isAuthenticated, (req, res) => {
res.json({
message: "User profile data",
user: req.session.user
});
});
🔷 Logout (Destroy Session)
app.post("/logout", (req, res) => {
req.session.destroy(() => {
res.clearCookie("connect.sid");
res.json({ message: "Logged out successfully" });
});
});
🔷 Session Security Tips
- httpOnly cookie ব্যবহার করুন
- Session expiration time কম রাখুন (10–20 min)
- secure: true (production-এ HTTPS required)
- Session fixation attack এড়াতে session regeneration করুন
req.session.regenerate((err) => {
if (err) console.log(err);
});
🔷 Session vs JWT: কোনটা কখন ব্যবহার করবেন?
| Session | JWT |
|---|---|
| Server stores user data | Client stores token |
| Best for Traditional Web App | Best for APIs, Mobile Apps |
| More secure | Scalable but risky if token leaked |
🔷 Summary
- Session Authentication server-side based
- Cookie session ID বহন করে
- Traditional websites-এ session সবচেয়ে popular
- Logout করলে session destroy হয়
- Session fixation attack এড়াতে regenerate প্রয়োজন
✔ Session-Based Authentication হলো Express.js learning journey-র একটি essential chapter!
লোড হচ্ছে...
1. Session Based Authentication কীভাবে কাজ করে?
Server এ session store করা হয় এবং client এ session id cookie হিসেবে থাকে।
2. JWT ও Session Authentication এর পার্থক্য কী?
JWT stateless, আর Session server-side stateful authentication।