Session এবং Cookies ব্যবস্থাপনা

এক্সপ্রেসজেএস (ExpressJS) - Web Development

285

ExpressJS অ্যাপ্লিকেশনগুলোতে Session এবং Cookies ব্যবস্থাপনা সাধারণত ব্যবহারকারীদের লগইন তথ্য, প্রেফারেন্স এবং অন্যান্য গুরুত্বপূর্ণ ডেটা ট্র্যাক করার জন্য ব্যবহৃত হয়। এই দুটি প্রযুক্তি HTTP প্রোটোকলের সীমাবদ্ধতা কাটিয়ে উঠতে সাহায্য করে, কারণ HTTP একটি Stateless প্রোটোকল। অর্থাৎ, প্রতি রিকোয়েস্টের সময় ক্লায়েন্ট এবং সার্ভারের মধ্যে কোনও স্থায়ী সংযোগ বা ডেটা থাকে না। Session এবং Cookies এই সমস্যা সমাধানে সহায়তা করে।


১. Cookies কি?

Cookies হল ছোট টেক্সট ফাইল যা ওয়েব ব্রাউজার বা ক্লায়েন্ট সাইডে সংরক্ষিত থাকে এবং তা পরে সার্ভারে পাঠানো হয়। সাধারণত client-side storage হিসেবে কাজ করে, যেখানে সার্ভার কোনো বিশেষ ডেটা বা তথ্য সংরক্ষণ না করে শুধু একটি কোড বা চিহ্ন (যেমন একটি ID) পাঠায়। ব্রাউজার এটি পরবর্তীতে সার্ভারে পাঠাতে পারে, যাতে সার্ভার পূর্ববর্তী রিকোয়েস্টের ভিত্তিতে তথ্য প্রদান করতে পারে।

Cookies এর কিছু সাধারণ ব্যবহার:

  • ব্যবহারকারীর লগইন সেশন ট্র্যাক করা
  • প্রেফারেন্স বা ভাষা সেটিংস সংরক্ষণ করা
  • শপিং কার্ট তথ্য সংরক্ষণ করা

Cookies এর বৈশিষ্ট্য:

  • Cookies ক্লায়েন্ট সাইডে সংরক্ষিত থাকে।
  • একটি নির্দিষ্ট সময় পর্যন্ত বা ব্রাউজার বন্ধ না হওয়া পর্যন্ত এটি কাজ করতে পারে।
  • Cookies একটি নির্দিষ্ট ডোমেইনের সাথে সম্পর্কিত থাকে এবং কেবল সেই ডোমেইনে রিকোয়েস্ট পাঠানো হয়।

২. Session কি?

Session হল সার্ভার সাইডে সংরক্ষিত ডেটা যা ব্যবহারকারীর সাথে সম্পর্কিত এবং সাধারণত server-side storage হিসেবে কাজ করে। একটি সেশন আইডি ব্যবহারকারীর ব্রাউজারে রাখা হয় এবং সেটি পরবর্তীতে সেশন ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়। Session ব্যবহারকারীর লগইন তথ্য, কাস্টম প্রেফারেন্স বা অ্যাপ্লিকেশনের যেকোনো ধরনের স্থায়ী তথ্য সংরক্ষণ করতে ব্যবহৃত হয়।

Session এর বৈশিষ্ট্য:

  • Session সাধারণত সার্ভার সাইডে সংরক্ষিত হয়।
  • ব্যবহারকারী নির্দিষ্ট সেশন আইডি দ্বারা সেই সেশনে প্রবেশ করতে পারে।
  • ব্যবহারকারী একাধিক পৃষ্ঠায় নেভিগেট করার পরও তার সেশন চলমান থাকে যতক্ষণ না সেশনটি শেষ হয় (যেমন, লগ আউট বা টাইম আউট)।

৩. ExpressJS-এ Cookies এবং Session ব্যবস্থাপনা

ExpressJS-এ Cookies এবং Session ব্যবস্থাপনা করার জন্য কিছু বিশেষ মডিউল ব্যবহার করা হয়, যেমন cookie-parser এবং express-session

৩.১. Cookies ব্যবস্থাপনা

ExpressJS-এ Cookies সেট এবং রিড করার জন্য cookie-parser প্যাকেজটি ব্যবহার করা হয়।

৩.১.১. cookie-parser ইনস্টলেশন
npm install cookie-parser
৩.১.২. ExpressJS-এ Cookies সেট করা
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// cookie-parser middleware ব্যবহার করা
app.use(cookieParser());

// একটি রুটের মাধ্যমে Cookie সেট করা
app.get('/set-cookie', (req, res) => {
  res.cookie('username', 'john_doe', { maxAge: 900000, httpOnly: true });
  res.send('Cookie has been set');
});

// Cookie পড়া
app.get('/get-cookie', (req, res) => {
  let username = req.cookies.username;
  res.send(`Hello, ${username}`);
});

app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

এখানে, res.cookie() ফাংশন ব্যবহার করে cookies সেট করা হয় এবং req.cookies এর মাধ্যমে cookies পড়া হয়। maxAge এর মাধ্যমে cookie এর মেয়াদ নির্ধারণ করা হয় এবং httpOnly সেট করলে শুধুমাত্র HTTP রিকোয়েস্টের মাধ্যমে cookie অ্যাক্সেস করা যায়, JavaScript দ্বারা না।

৩.২. Session ব্যবস্থাপনা

ExpressJS-এ session ব্যবস্থাপনা করতে express-session প্যাকেজটি ব্যবহার করা হয়। এটি সার্ভার সাইডে ব্যবহারকারীর সেশন ডেটা সংরক্ষণ করতে সাহায্য করে।

৩.২.১. express-session ইনস্টলেশন
npm install express-session
৩.২.২. ExpressJS-এ Session ব্যবহারের উদাহরণ
const express = require('express');
const session = require('express-session');
const app = express();

// express-session middleware ব্যবহার করা
app.use(session({
  secret: 'your_secret_key',    // সেশন এনক্রিপ্ট করার জন্য সিক্রেট কী
  resave: false,                // সেশন ডেটা প্রতি রিকোয়েস্টে সেভ করতে হবে কি না
  saveUninitialized: true,      // যদি সেশন শুরু হয় তাহলে তা সেভ করা
  cookie: { secure: false }     // cookie secure হওয়া উচিত যদি HTTPS ব্যবহার করেন
}));

// সেশন সেট করা
app.get('/set-session', (req, res) => {
  req.session.username = 'john_doe';
  res.send('Session has been set');
});

// সেশন থেকে ডেটা পড়া
app.get('/get-session', (req, res) => {
  let username = req.session.username;
  res.send(`Hello, ${username}`);
});

// সেশন ডিলিট করা
app.get('/destroy-session', (req, res) => {
  req.session.destroy((err) => {
    if (err) {
      return res.send('Error destroying session');
    }
    res.send('Session destroyed');
  });
});

app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

এখানে, express-session প্যাকেজটি ব্যবহার করা হয়েছে। সেশন সেট করতে req.session ব্যবহার করা হয় এবং সেশন ডেটা রিট্রিভ করতে আবার req.session ব্যবহার করা হয়। সেশন ডিলিট করতে req.session.destroy() ফাংশন ব্যবহার করা হয়।


৪. Session এবং Cookies এর মধ্যে পার্থক্য

বৈশিষ্ট্যCookiesSessions
স্টোরেজক্লায়েন্ট সাইডে (ব্রাউজার)সার্ভার সাইডে
নিরাপত্তাকম নিরাপদ (ব্যবহারকারী পরিবর্তন করতে পারে)বেশ নিরাপদ (সার্ভারে সংরক্ষিত)
লাইফটাইমসাধারণত নির্দিষ্ট সময়ের জন্য, ব্রাউজার বন্ধ হলে মুছে যায়সেশন টাইম আউট বা লগ আউট হলে শেষ হয়
ব্যবহারছোট তথ্য সংরক্ষণের জন্য যেমন ইউজার প্রেফারেন্সবড় তথ্য সংরক্ষণের জন্য যেমন লগইন সেশন
অ্যাক্সেসশুধুমাত্র ব্রাউজার (JavaScript দ্বারা এক্সেস করা যায়)শুধুমাত্র সার্ভার (সার্ভার সাইড থেকে এক্সেস করা যায়)

সারাংশ

ExpressJS অ্যাপ্লিকেশনে Cookies এবং Sessions ব্যবস্থাপনা ব্যবহারকারীর তথ্য সংরক্ষণ এবং তাদের কার্যক্রম ট্র্যাক করতে ব্যবহৃত হয়। Cookies সাধারণত ক্লায়েন্ট সাইডে সংরক্ষিত থাকে এবং ছোট ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, যেখানে Sessions সার্ভার সাইডে সংরক্ষিত থাকে এবং সাধারণত লগইন সেশন বা বড় তথ্য সংরক্ষণের জন্য ব্যবহৃত হয়। ExpressJS-এ cookie-parser এবং express-session প্যাকেজ ব্যবহার করে এই ব্যবস্থাপনা সহজেই করা যায়।

Content added By

Cookies হল ছোট ডাটা ফাইল যা ওয়েব সার্ভার ব্রাউজারে পাঠায় এবং ব্রাউজার সেটি ব্যবহারকারীর কম্পিউটারে সেভ করে রাখে। এগুলি পরবর্তী সময়ে সার্ভারে পাঠানো হয়, যা সার্ভারকে ব্যবহারকারীর পরিচয় অথবা পছন্দসই তথ্য সংরক্ষণ করতে সাহায্য করে। ExpressJS-এ cookies ব্যবহারের মাধ্যমে আপনি ইউজারের সেশন ম্যানেজমেন্ট, অথেনটিকেশন, এবং কাস্টম ডেটা সংরক্ষণ করতে পারবেন।


Cookies কী?

Cookie একটি ছোট তথ্য ফাইল যা একটি নির্দিষ্ট ওয়েবসাইটের সাথে সম্পর্কিত থাকে। এটি ব্রাউজারে সংরক্ষিত থাকে এবং পরবর্তীতে সেই ওয়েবসাইটে ফিরে গেলে তা সার্ভারে পাঠানো হয়। Cookies সাধারণত ব্যবহারকারীর কার্যকলাপ ট্র্যাক করার জন্য ব্যবহৃত হয়, যেমন লগ ইন তথ্য, ইউজারের পছন্দ, এবং শপিং কার্টের অবস্থা।

Cookies এর কিছু সাধারণ ব্যবহার:

  1. অথেনটিকেশন: ইউজার লগইন হওয়ার পর, তাদের টোকেন অথবা সেশন আইডি সেভ করা হয় যাতে তারা পরবর্তী সময়ে লগইন করতে না হয়।
  2. শপিং কার্ট: ই-কমার্স সাইটে ব্যবহারকারীর শপিং কার্ট সেভ করা হয় যাতে তারা সাইটে ফিরে এসে আগের পণ্য দেখতে পায়।
  3. পছন্দ সেভ করা: ইউজারের ভাষা পছন্দ বা থিম সেভ করা।

Cookies কিভাবে কাজ করে?

Cookies ব্যবহারের জন্য দুটি মূল কাজ রয়েছে:

  1. Cookies সেট করা (Setting Cookies): সার্ভার বা ওয়েবপেজ যখন প্রথম ব্যবহারকারীর ব্রাউজারে কোড পাঠায়, তখন একটি Cookie সেট করা হয়। এটি সাধারণত HTTP রেসপন্সের অংশ হিসেবে সার্ভার থেকে পাঠানো হয়।
  2. Cookies পাঠানো (Sending Cookies): যখন ব্যবহারকারী পরবর্তী বার সাইটে আসে, তখন ব্রাউজার সেই Cookie সার্ভারে পাঠায়, এবং সার্ভার সেই ডাটা ব্যবহার করে বিভিন্ন রিকোয়েস্ট প্রসেস করতে পারে।

ExpressJS-এ Cookies ব্যবহার

ExpressJS-এ cookies ব্যবহারের জন্য সাধারণত cookie-parser middleware ব্যবহার করা হয়। এটি একটি জনপ্রিয় প্যাকেজ, যা cookies পড়তে এবং সেট করতে সাহায্য করে।


১. cookie-parser ইনস্টল করা

প্রথমে, cookie-parser প্যাকেজটি ইনস্টল করতে হবে:

npm install cookie-parser

২. ExpressJS-এ Cookies সেট করা এবং রিড করা

২.১. Cookies সেট করা

Cookies সেট করতে res.cookie() ফাংশন ব্যবহার করা হয়। এখানে আপনি cookie এর নাম, মান, এবং অন্যান্য কনফিগারেশন যেমন expires, httpOnly, ইত্যাদি নির্ধারণ করতে পারেন।

উদাহরণ:

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
const port = 3000;

// cookie-parser middleware ব্যবহার করা
app.use(cookieParser());

// একটি রাউটে cookie সেট করা
app.get('/set-cookie', (req, res) => {
  res.cookie('userName', 'JohnDoe', { maxAge: 900000, httpOnly: true });  // Cookie সেট করা হচ্ছে
  res.send('Cookie has been set');
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

এখানে res.cookie() ফাংশনের মাধ্যমে userName নামে একটি cookie সেট করা হচ্ছে, যার মান "JohnDoe" এবং এটি 15 মিনিটের জন্য (900,000 মিলিসেকেন্ড) বৈধ থাকবে। httpOnly: true এর মানে হলো এই cookie শুধুমাত্র HTTP রিকোয়েস্টের মাধ্যমে অ্যাক্সেস করা যাবে, JavaScript এর মাধ্যমে নয়।

২.২. Cookies রিড করা

Cookies পড়তে req.cookies অবজেক্ট ব্যবহার করা হয়। এতে অ্যাক্সেসযোগ্য cookies গুলো এক্সপোজ করা হয়।

উদাহরণ:

app.get('/get-cookie', (req, res) => {
  const userName = req.cookies.userName;  // Cookie পড়া হচ্ছে
  if (userName) {
    res.send(`Hello, ${userName}`);
  } else {
    res.send('No user cookie found');
  }
});

এখানে, /get-cookie রাউটে পাঠানো হলে যদি userName cookie থাকে, তবে সেটি রেসপন্সে প্রদর্শিত হবে।


৩. Cookies মুছে ফেলা

Cookies মুছতে res.clearCookie() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি cookie এর নাম প্রদান করে এবং এটি ব্রাউজার থেকে cookie মুছে ফেলে।

উদাহরণ:

app.get('/clear-cookie', (req, res) => {
  res.clearCookie('userName');  // userName cookie মুছে ফেলা হচ্ছে
  res.send('Cookie has been cleared');
});

এখানে userName cookie মুছে ফেলা হয়েছে এবং ব্যবহারকারীকে জানানো হয়েছে যে cookie মুছে ফেলা হয়েছে।


৪. Cookies এর অপশনসমূহ

maxAge: এই অপশনটি cookie এর জীবিত সময় নির্ধারণ করে, মিলিসেকেন্ডে। উদাহরণস্বরূপ, 15 মিনিটের জন্য cookie রাখার জন্য { maxAge: 900000 } দেওয়া হয়।

expires: এই অপশনটি cookie এর এক্সপায়ারি সময় নির্ধারণ করে, যা একটি নির্দিষ্ট Date অবজেক্ট হতে পারে। উদাহরণস্বরূপ:

res.cookie('session', 'abc123', { expires: new Date(Date.now() + 900000) });

httpOnly: এই অপশনটি cookie নিরাপদ রাখে, কারণ এটি ব্রাউজার জাভাস্ক্রিপ্ট থেকে cookie অ্যাক্সেস নিষিদ্ধ করে। এটি নিরাপত্তার জন্য অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন sensitive ডাটা যেমন সেশন আইডি ব্যবহার করা হয়।

secure: এটি cookie শুধুমাত্র HTTPS কানেকশনে পাঠানোর অনুমতি দেয়, অর্থাৎ ওয়েবপেজের নিরাপত্তা নিশ্চিত করতে এটি ব্যবহার করা হয়।

sameSite: এই অপশনটি cross-site request forgery (CSRF) আক্রমণ থেকে সুরক্ষা প্রদান করে। এর তিনটি মান হতে পারে:

  • strict: cookie শুধুমাত্র যখন একই ডোমেইন থেকে রিকোয়েস্ট করা হয় তখনই পাঠানো হবে।
  • lax: কিছু cross-site রিকোয়েস্টে cookie পাঠানো হবে।
  • none: cookie সব সময় পাঠানো হবে, তবে এটি secure হওয়া দরকার।

সারাংশ

Cookies হল একটি গুরুত্বপূর্ণ উপাদান যা ওয়েব অ্যাপ্লিকেশনে ব্যবহারকারীর ডাটা সংরক্ষণ এবং ট্র্যাকিংয়ের জন্য ব্যবহৃত হয়। ExpressJS-এ cookies ব্যবহারের জন্য cookie-parser middleware ব্যবহার করা হয়। আপনি cookies সেট করতে, পড়তে এবং মুছতে পারেন সহজেই res.cookie(), req.cookies এবং res.clearCookie() ফাংশন ব্যবহার করে। এটি ব্যবহারকারীর অথেনটিকেশন, শপিং কার্ট, পছন্দসই সেটিংস ইত্যাদি সংরক্ষণ করতে সহায়তা করে।

Content added By

ExpressJS-এ Cookies ব্যবহৃত হয় ব্যবহারকারীর ডেটা সংরক্ষণ এবং ব্যবহারের জন্য। Cookies সাধারণত ব্যবহারকারী সম্পর্কে কিছু মৌলিক তথ্য যেমন লগিন স্ট্যাটাস, ইউজার প্রেফারেন্স, ট্র্যাকিং ডেটা ইত্যাদি সঞ্চিত রাখে। ExpressJS-এ cookies ব্যবস্থাপনা করার জন্য cookie-parser নামক একটি জনপ্রিয় Middleware ব্যবহার করা হয়।


Cookies কি?

Cookies হল ছোট তথ্যের টুকরা যা ওয়েব ব্রাউজার এবং সার্ভার এর মধ্যে আদান-প্রদান হয়। এগুলি ব্যবহারকারী সম্পর্কে কিছু তথ্য সংরক্ষণ করে, যেমন:

  • লগইন তথ্য
  • ভাষা পছন্দ
  • ট্র্যাকিং তথ্য
  • সেশন আইডি

ExpressJS-এ, cookies সাধারণত HTTP রেসপন্সে সেট করা হয় এবং HTTP রিকোয়েস্টে পাঠানো হয়।


১. ExpressJS এ Cookies সেট করা

ExpressJS-এ cookies সেট করার জন্য res.cookie() মেথড ব্যবহার করা হয়। এর মাধ্যমে আপনি কুকির নাম, মান, এবং অন্যান্য পছন্দসই অপশন নির্ধারণ করতে পারেন (যেমন এক্সপিরেশন টাইম, ডোমেন, সিকিউরিটি প্রোটোকল ইত্যাদি)।

১.১. উদাহরণ

const express = require('express');
const app = express();

// Cookie সেট করার উদাহরণ
app.get('/set-cookie', (req, res) => {
  res.cookie('user', 'JohnDoe', { maxAge: 900000, httpOnly: true });
  res.send('Cookie has been set!');
});

app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

কোড ব্যাখ্যা:

  • res.cookie('user', 'JohnDoe'): এখানে user কুকির নাম এবং 'JohnDoe' হল এর মান।
  • maxAge: 900000: কুকির মেয়াদ (যা 900000 মিলিসেকেন্ড বা 15 মিনিট নির্ধারণ করে)।
  • httpOnly: true: কুকিটিকে শুধুমাত্র HTTP রিকোয়েস্টের মাধ্যমে অ্যাক্সেসযোগ্য করে তোলে, যা ক্লায়েন্ট সাইড স্ক্রিপ্ট থেকে এটি অ্যাক্সেস হতে দেয় না।

২. ExpressJS এ Cookies পড়া

ExpressJS-এ কুকি পড়ার জন্য req.cookies অবজেক্ট ব্যবহার করা হয়, যা রিকোয়েস্টে পাঠানো কুকির মান অ্যাক্সেস করতে সাহায্য করে। কুকি ব্যবহারের জন্য cookie-parser মিডলওয়্যারটি ইনস্টল এবং কনফিগার করতে হয়।

২.১. cookie-parser ইনস্টলেশন

npm install cookie-parser

২.২. Cookie-parser মিডলওয়্যার ব্যবহার

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// cookie-parser মিডলওয়্যার যোগ করা
app.use(cookieParser());

// Cookie পড়ার উদাহরণ
app.get('/get-cookie', (req, res) => {
  const user = req.cookies.user; // 'user' কুকি পড়া
  if (user) {
    res.send(`Hello ${user}!`);
  } else {
    res.send('No user cookie found!');
  }
});

app.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

কোড ব্যাখ্যা:

  • cookieParser(): cookie-parser মিডলওয়্যার রিকোয়েস্টের কুকি গুলোকে req.cookies অবজেক্টে ধারণ করে।
  • req.cookies.user: এখানে কুকির মান user নামক কুকি থেকে পড়া হচ্ছে।

৩. Cookies এর অতিরিক্ত অপশনসমূহ

Cookies-এ কিছু অতিরিক্ত অপশন ব্যবহার করা যায়, যেমন:

  • maxAge: কুকির মেয়াদ সময় নির্ধারণ করে (মিলিসেকেন্ডে)।
  • expires: কুকির মেয়াদ নির্ধারণের জন্য একটি নির্দিষ্ট তারিখ।
  • secure: কুকি শুধুমাত্র HTTPS প্রোটোকলের মাধ্যমে পাঠানো হবে।
  • httpOnly: কুকি শুধুমাত্র HTTP রিকোয়েস্টের মাধ্যমে অ্যাক্সেসযোগ্য থাকবে, JavaScript এর মাধ্যমে নয়।
  • sameSite: কুকির ক্রস-সাইট রিকোয়েস্ট সীমাবদ্ধ করার জন্য ব্যবহৃত হয়। এর মান হতে পারে 'strict', 'lax', বা 'none'

৩.১. উদাহরণ

app.get('/set-secure-cookie', (req, res) => {
  res.cookie('sessionId', '123456', {
    maxAge: 3600000,    // 1 ঘণ্টা
    secure: true,       // HTTPS-এ কেবল পাঠানো হবে
    httpOnly: true,     // শুধুমাত্র HTTP থেকে অ্যাক্সেসযোগ্য
    sameSite: 'strict'  // ক্রস-সাইট রিকোয়েস্ট ব্লক করা হবে
  });
  res.send('Secure cookie has been set!');
});

৪. Cookies মুছে ফেলা

Cookies মুছে ফেলতে res.clearCookie() মেথড ব্যবহার করা হয়। এটি কেবল কুকির মান মুছে দেয়, কিন্তু কুকির সাথে সম্পর্কিত ডেটাও মুছে দেয়।

৪.১. উদাহরণ

app.get('/clear-cookie', (req, res) => {
  res.clearCookie('user');
  res.send('User cookie has been cleared!');
});

এখানে, res.clearCookie('user') কুকি 'user' মুছে ফেলবে।


সারাংশ

ExpressJS-এ Cookies ব্যবহার করে আপনি ব্যবহারকারীর ডেটা সংরক্ষণ এবং পড়ার কাজটি খুব সহজেই করতে পারেন। কুকি সেট করা, কুকি পড়া এবং কুকি মুছে ফেলার জন্য ExpressJS একটি সোজাসাপ্টা API প্রদান করে। কুকি ব্যবস্থাপনা করতে cookie-parser মিডলওয়্যারটি ইনস্টল করে ব্যবহার করতে হয়। আপনি কুকির মেয়াদ, সিকিউরিটি অপশন এবং অন্যান্য পছন্দসই ফিচার যুক্ত করে কুকি ব্যবস্থাপনা করতে পারেন।

Content added By

এক্সপ্রেসজেএস (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 রিজেনারেশন এবং অন্যান্য টেকনিকাল ব্যবস্থা অবলম্বন করা উচিত।

Content added By

ExpressJS অ্যাপ্লিকেশন তৈরি করার সময় ব্যবহারকারীদের সেশনের তথ্য সংরক্ষণ এবং কুকি ম্যানেজমেন্ট করার জন্য Cookie Parser এবং Session Middleware অত্যন্ত গুরুত্বপূর্ণ টুলস। এই টুলগুলোর মাধ্যমে আপনি ব্যবহারকারীর ডেটা সঠিকভাবে ট্র্যাক করতে, অথেনটিকেশন পরিচালনা করতে এবং ওয়েব অ্যাপ্লিকেশনকে আরও ইন্টারঅ্যাকটিভ করতে পারেন।


১. Cookie Parser Middleware

Cookie Parser middleware একটি ExpressJS middleware যা HTTP রিকোয়েস্টের কুকি (cookies) পার্স করে এবং এগুলোকে সহজভাবে ব্যবহারযোগ্য ফরম্যাটে req.cookies অবজেক্টে সরবরাহ করে। এই middleware এর মাধ্যমে আপনি ব্রাউজারে সেভ করা কুকি থেকে ডেটা এক্সেস করতে পারেন।

১.১. Cookie Parser ইন্সটল করা

প্রথমে, আপনাকে cookie-parser প্যাকেজটি ইনস্টল করতে হবে:

npm install cookie-parser

১.২. Express অ্যাপে Cookie Parser ব্যবহার করা

এবার, আপনার Express অ্যাপে Cookie Parser middleware ব্যবহার করুন:

const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();

// Cookie Parser middleware ব্যবহার করা
app.use(cookieParser());

// রাউট তৈরি
app.get('/', (req, res) => {
  res.send('Hello, world!');
});

// কুকি সেট করা
app.get('/setcookie', (req, res) => {
  res.cookie('username', 'John Doe', { httpOnly: true, secure: false }); // কুকি সেট করা
  res.send('Cookie has been set!');
});

// কুকি পড়া
app.get('/getcookie', (req, res) => {
  const username = req.cookies['username']; // কুকি থেকে ডেটা পড়া
  res.send(`Cookie value: ${username}`);
});

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে:

  • cookieParser() middleware রিকোয়েস্টে উপস্থিত কুকি গুলো পার্স করে এবং req.cookies অবজেক্টে রাখে।
  • res.cookie() ফাংশন কুকি সেট করার জন্য ব্যবহৃত হয়। এখানে কুকির নাম 'username' এবং মান 'John Doe' দেওয়া হয়েছে।
  • /getcookie রাউটে কুকি থেকে ডেটা পড়ে এবং সেটি ক্লায়েন্টকে রেসপন্স হিসেবে পাঠানো হচ্ছে।

১.৩. কুকির বিভিন্ন অপশন

  • httpOnly: true — এই অপশনটি কুকিকে জাভাস্ক্রিপ্টের মাধ্যমে অ্যাক্সেস করা থেকে রক্ষা করে।
  • secure: true — কুকি শুধুমাত্র HTTPS রিকোয়েস্টের মাধ্যমে পাঠানো হবে।
  • expires — কুকির মেয়াদ নির্ধারণ করা যায়।

২. Session Middleware

Session middleware ব্যবহারকারীদের সেশন (ব্যক্তিগত সঞ্চিত ডেটা) সংরক্ষণ এবং পরিচালনা করতে সাহায্য করে। এটি সাধারণত অ্যাপ্লিকেশনের মধ্যে স্টেট হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়, যেমন: ইউজার লগইন তথ্য, শপিং কার্ট ডেটা, বা অন্যান্য প্রকারের সাময়িক তথ্য।

ExpressJS-এ সেশন ব্যবস্থাপনা করতে express-session প্যাকেজ ব্যবহার করা হয়।

২.১. express-session ইনস্টল করা

npm install express-session

২.২. Express অ্যাপে Session Middleware ব্যবহার করা

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

// Session middleware ব্যবহার করা
app.use(session({
  secret: 'your-secret-key',  // সেশন এনক্রিপশন জন্য সিক্রেট কী
  resave: false,              // সেশন আবার রিসেভ হবে না
  saveUninitialized: true,    // সেশন শুরু হলে সেভ হবে
  cookie: { secure: false }   // secure সেটিং ব্রাউজারের উপর নির্ভর করে
}));

// রাউট তৈরি
app.get('/', (req, res) => {
  res.send('Welcome to the home page!');
});

// সেশন সেট করা
app.get('/login', (req, res) => {
  req.session.user = 'John Doe';  // সেশনে ইউজারের নাম সংরক্ষণ
  res.send('User logged in!');
});

// সেশন ডেটা পড়া
app.get('/dashboard', (req, res) => {
  if (req.session.user) {
    res.send(`Welcome, ${req.session.user}!`);
  } else {
    res.send('Please log in.');
  }
});

// সেশন মুছে ফেলা
app.get('/logout', (req, res) => {
  req.session.destroy((err) => {  // সেশন ডেস্ট্রয় করা
    if (err) {
      return res.send('Error logging out');
    }
    res.send('Logged out successfully');
  });
});

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

এখানে:

  • session() middleware সেশন ম্যানেজমেন্টের জন্য ব্যবহার করা হচ্ছে।
  • সেশনের জন্য secret (এনক্রিপশন কিপ কুকির জন্য) ব্যবহার করা হয়।
  • /login রাউটে সেশনে user তথ্য সেভ করা হচ্ছে এবং /dashboard রাউটে সেশন থেকে ডেটা রিট্রিভ করা হচ্ছে।
  • /logout রাউটে সেশন ডেস্ট্রয় করা হচ্ছে।

২.৩. সেশন কুকি অপশন

  • secret: সেশন কুকি এনক্রিপ্ট করার জন্য একটি সিক্রেট কী।
  • resave: এই অপশনটি নিশ্চিত করে যে সেশনকে আবার রিসেভ করা হবে না যদি সেখানে কোনো পরিবর্তন না হয়।
  • saveUninitialized: সেশন অবজেক্টকে সেভ করে যদি এটি পুরোপুরি নতুন হয়।
  • cookie: এখানে secure: true সেট করলে কুকি কেবল HTTPS কনেকশনে পাঠানো হবে।

৩. Cookie এবং Session এর মধ্যে পার্থক্য

বৈশিষ্ট্যCookieSession
ব্যবহারব্রাউজারে ছোট ডেটা সংরক্ষণ করা হয়সার্ভারে ডেটা সংরক্ষণ করা হয়
স্টোরেজকুকি ব্যবহারকারীর ব্রাউজারে স্টোর হয়সেশন ডেটা সার্ভারে স্টোর হয়
মেয়াদকুকির মেয়াদ শেষ হলে কুকি অটোমেটিকালি মুছে যায়সেশন সাধারণত এক সেশন শেষে বা লগ আউট হওয়ার পর মুছে যায়
ডেটার পরিমাণকুকিতে কম পরিমাণ ডেটা রাখা যায়সেশন একাধিক ডেটা ধারণ করতে পারে
সিকিউরিটিকুকির মাধ্যমে ডেটা ব্রাউজারে স্টোর হওয়ায়, সিকিউরিটি ঝুঁকি থাকেসেশন সার্ভারে থাকে, তাই বেশি সিকিউরিটি নিশ্চিত হয়

সারাংশ

Cookie Parser এবং Session Middleware ExpressJS অ্যাপে ডেটা ম্যানেজমেন্ট এবং ব্যবহারকারীর সেশন ট্র্যাক করার জন্য খুবই গুরুত্বপূর্ণ। cookie-parser middleware ব্যবহারকারীর কুকি গুলো পার্স করে এবং express-session middleware ব্যবহারকারীর সেশন সংরক্ষণ ও পরিচালনা করে। কুকি সাধারণত ছোট আকারের ডেটা সংরক্ষণে ব্যবহৃত হয়, যেখানে সেশন দীর্ঘস্থায়ী এবং বৃহৎ ডেটা ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...