এক্সপ্রেসজেএস (ExpressJS) অ্যাপ্লিকেশনে Session Management (সেশন ব্যবস্থাপনা) গুরুত্বপূর্ণ একটি বিষয়, বিশেষত যখন ব্যবহারকারীর লগইন, পেমেন্ট প্রক্রিয়া বা অন্যান্য ডায়নামিক ইন্টারঅ্যাকশনগুলির সাথে কাজ করা হয়। সেশন ব্যবহারকারীর তথ্য সংরক্ষণ এবং অ্যাপ্লিকেশনটির মধ্যে তথ্য শেয়ার করার একটি নিরাপদ উপায়। সেশনগুলো সাধারণত ব্যবহারকারীর ব্রাউজারে কুকি হিসেবে সংরক্ষিত হয় এবং সার্ভারে তথ্য রাখা হয়।
১. Session কি এবং কেন প্রয়োজন?
Session (সেশন) একটি টেম্পোরারি স্টোরেজ যা সার্ভার সাইডে সংরক্ষিত হয়, যেখানে ব্যবহারকারীর তথ্য যেমন লগইন তথ্য, পছন্দ, বা ডাটা সঞ্চিত থাকে। যখন একটি ব্যবহারকারী ওয়েব অ্যাপ্লিকেশন ব্যবহার করে, তাদের তথ্য সেশন দ্বারা ট্র্যাক করা হয় এবং বিভিন্ন রিকোয়েস্টে সেই তথ্য পুনরুদ্ধার করা যায়।
যেহেতু HTTP একটি Stateless প্রোটোকল, প্রতি রিকোয়েস্টের জন্য সার্ভারকে ব্যবহারকারীর তথ্য পুনরায় সংগ্রহ করতে হয়। সেশন ব্যবস্থাপনা এই সমস্যার সমাধান দেয়, যাতে সার্ভার ব্যবহারকারীর তথ্য সংরক্ষণ করতে পারে এবং ব্যবহারকারী বারবার লগইন বা অন্য কোনো ডাটা প্রবাহের মধ্যে ফিরে আসতে পারে।
২. ExpressJS তে সেশন ব্যবস্থাপনা
ExpressJS তে সেশন ব্যবস্থাপনা করার জন্য express-session নামক একটি প্যাকেজ ব্যবহার করা হয়। এটি একটি সহজ এবং কার্যকরী টুল, যা ব্যবহারকারীর সেশন ট্র্যাক করতে সাহায্য করে।
২.১. express-session ইনস্টল করা
Express অ্যাপ্লিকেশনে সেশন ব্যবস্থাপনা শুরু করতে প্রথমে আপনাকে express-session প্যাকেজ ইনস্টল করতে হবে:
npm install express-session
২.২. ExpressJS অ্যাপ্লিকেশনে express-session কনফিগার করা
const express = require('express');
const session = require('express-session');
const app = express();
const port = 3000;
// express-session কনফিগারেশন
app.use(session({
secret: 'your-secret-key', // সেশন এনক্রিপশন সিক্রেট
resave: false, // সেশনকে প্রতি রিকোয়েস্টে পুনরায় সংরক্ষণ করবে না
saveUninitialized: true, // সেশন শুরু হওয়ার আগে কোন প্রকার ডাটা না থাকলে সেভ করবে না
cookie: { secure: false } // কুকি সেট করা (secure: true হলে HTTPS প্রয়োজন)
}));
app.get('/', (req, res) => {
if (req.session.views) {
req.session.views++;
res.send(`<h1>Views: ${req.session.views}</h1>`);
} else {
req.session.views = 1;
res.send('<h1>Welcome to the session demo</h1>');
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
কোড ব্যাখ্যা:
secret: এটি একটি সিক্রেট কী যা সেশন ID এর এনক্রিপশন নিশ্চিত করে। এটি কুকি সুরক্ষিত রাখে।resave: যদিfalseসেট করা থাকে, সেশন কেবল তখনই সেভ হবে যখন কোনো পরিবর্তন ঘটবে।saveUninitialized: নতুন সেশন তৈরি হওয়ার আগে কোনো পরিবর্তন না হলে এটি সেশন সেভ করবে না।cookie: কুকি সম্পর্কিত কনফিগারেশন, যেমন সিকিউরিটি সেটিংস।
২.৩. সেশন ডাটা ব্যবহার করা
একবার সেশন কনফিগার হয়ে গেলে, আপনি সেশন ডাটার মাধ্যমে বিভিন্ন ভ্যালু ট্র্যাক করতে পারবেন। যেমন, একটি সেশন ভ্যারিয়েবল তৈরি করা:
app.get('/set-session', (req, res) => {
req.session.username = 'John Doe';
res.send('Username has been set in session!');
});
app.get('/get-session', (req, res) => {
res.send(`Hello ${req.session.username}`);
});
এখানে:
/set-sessionরাউটে সেশন ভ্যারিয়েবলusernameসেট করা হচ্ছে।/get-sessionরাউটে সেই সেশন ভ্যারিয়েবল ব্যবহার করা হচ্ছে।
৩. Persistent Sessions (স্থায়ী সেশন)
Persistent Sessions (স্থায়ী সেশন) এমন একটি সেশন যেখানে সেশন ডাটা ব্যবহারকারীর ব্রাউজারে দীর্ঘ সময় ধরে সংরক্ষিত থাকে, এমনকি সেশন শেষ হওয়ার পরও। এটি সাধারণত Cookies (কুকি) ব্যবহার করে করা হয়। সাধারণত, সেশন কুকি দ্বারা ব্যবহৃত হয় যা সেশনের শেষে মুছে যায়, কিন্তু আপনি যদি persistent sessions তৈরি করতে চান, তবে কুকির মেয়াদ বাড়ানো যায়।
৩.১. Persistent Session কুকি সেট করা
app.use(session({
secret: 'your-secret-key',
resave: false,
saveUninitialized: true,
cookie: {
secure: false, // এটি false থাকতে হবে যদি আপনি localhost তে ডেভেলপ করছেন
maxAge: 24 * 60 * 60 * 1000 // কুকি একদিন (24 ঘণ্টা) মেয়াদী
}
}));
এখানে:
maxAge: কুকির মেয়াদ নির্ধারণ করা হয়, এটি মিলিসেকেন্ডে সেট করা হয়। এখানে,24 * 60 * 60 * 1000মানে ২৪ ঘণ্টা।secure: এটি শুধুমাত্র HTTPS কননেকশনে কার্যকর, যদি আপনি উন্নয়ন পরিবেশে কাজ করছেন তবেfalseরাখতে হবে।
৩.২. Persistent Session এর উপকারিতা
- লগইন স্টোরেজ: ব্যবহারকারীরা একবার লগইন করলে তাদের সেশন ধরে রাখতে পারবেন, এমনকি ব্রাউজার বন্ধ করার পরেও।
- ব্যবহারকারীর পছন্দ সংরক্ষণ: ব্যবহারকারীরা তাদের পছন্দের সেটিংস বা ডাটা সংরক্ষণ করতে পারবেন।
- পেমেন্ট বা কেনাকাটার সেশন: বিভিন্ন ওয়েব অ্যাপ্লিকেশন যেখানে পেমেন্ট প্রক্রিয়া দীর্ঘ সময় ধরে চলে, সেখানে persistent session ব্যবহার করা হয়ে থাকে যাতে ব্যবহারকারী সেশনের মাঝে তথ্য হারিয়ে না যায়।
৪. সেশন সুরক্ষা
সেশন ব্যবস্থাপনার সময় সুরক্ষা খুবই গুরুত্বপূর্ণ। একাধিক সেশন অ্যাটাক থেকে রক্ষা করতে নিচের কিছু নিরাপত্তা ব্যবস্থা অবলম্বন করা যেতে পারে:
৪.১. Secure Cookie ব্যবহার
যদি আপনি HTTPS ব্যবহার করেন, তবে কুকির নিরাপত্তা নিশ্চিত করার জন্য secure: true কনফিগার করতে পারেন, যা কেবলমাত্র HTTPS পরিবেশে কার্যকর হবে।
cookie: {
secure: true, // শুধুমাত্র HTTPS সংযোগে কুকি ব্যবহৃত হবে
maxAge: 24 * 60 * 60 * 1000
}
৪.২. HttpOnly Cookie
কুকি সুরক্ষিত করার জন্য আপনি HttpOnly সেট করতে পারেন, যা ব্রাউজারের JavaScript কোডের মাধ্যমে কুকি অ্যাক্সেস বন্ধ করে দেয়।
cookie: {
httpOnly: true, // কুকি শুধুমাত্র HTTP প্রটোকলের মাধ্যমে অ্যাক্সেসযোগ্য হবে
secure: true,
maxAge: 24 * 60 * 60 * 1000
}
৪.৩. Session Fixation Attack থেকে রক্ষা
Session fixation attack থেকে রক্ষা পেতে সেশনের ID পুনরায় সেট করতে পারেন লগইন হওয়ার পর:
app.post('/login', (req, res) => {
req.session.regenerate((err) => {
if (err) {
return res.status(500).send('Error regenerating session');
}
req.session.username = 'John Doe';
res.send('Session regenerated and username set!');
});
});
সারাংশ
ExpressJS-এ সেশন ব্যবস্থাপনা অত্যন্ত গুরুত্বপূর্ণ, বিশেষত যখন আপনি ব্যবহারকারীর তথ্য ট্র্যাক করতে চান বা ডাইনামিক কার্যক্রম পরিচালনা করেন। express-session প্যাকেজের মাধ্যমে আপনি সহজে সেশন ব্যবস্থাপনা করতে পারেন। Persistent Sessions এর মাধ্যমে সেশন ডাটা দীর্ঘসময় ধরে সংরক্ষণ করা সম্ভব, যা ব্যবহারকারীদের লগইন বা অ্যাক্সেস সুবিধা দিতে সাহায্য করে। সেশন ব্যবস্থাপনায় সুরক্ষা নিশ্চিত করতে কুকির নিরাপত্তা, সেশন ID রিজেনারেশন এবং অন্যান্য টেকনিকাল ব্যবস্থা অবলম্বন করা উচিত।
Read more