এই নির্দেশিকায়, আমরা একটি ওয়েব অ্যাপ্লিকেশনে "সেশন" বলতে কী বোঝায়, সেশন পরিচালনার জন্য কেন রেডিস একটি পছন্দসই পছন্দ, কীভাবে একটি Upstash রেডিস ডাটাবেস সেট আপ করতে হয় এবং অবশেষে, এটিকে একটি Next.js অ্যাপ্লিকেশনে কীভাবে একীভূত করতে হয় তা শিখে আমরা Upstash Redis ব্যবহার করে একটি Next.js অ্যাপে সেশন ম্যানেজমেন্টের মাধ্যমে হাঁটব৷
"সেশন" কি?
একটি ওয়েব অ্যাপ্লিকেশনে, "সেশন" হল একটি অস্থায়ী, সার্ভার-সাইড স্টোরেজ পদ্ধতি যা একটি নির্দিষ্ট সময়ের ব্যবধানে একাধিক HTTP অনুরোধ জুড়ে অ্যাপ্লিকেশনটির সাথে ব্যবহারকারীর মিথস্ক্রিয়া অবস্থা বজায় রাখতে ব্যবহৃত হয়৷
যেহেতু HTTP একটি স্টেটলেস প্রোটোকল, যার অর্থ প্রতিটি অনুরোধ স্বাধীন এবং পূর্ববর্তী মিথস্ক্রিয়াগুলি "মনে" রাখে না, সেশনগুলি সার্ভারকে ব্যবহারকারী-নির্দিষ্ট ডেটা যেমন প্রমাণীকরণের স্থিতি, পছন্দগুলি, বা ওয়েবসাইটের সময় ব্যবহারকারীর যেকোনো ধরনের কার্যকলাপ ট্র্যাক এবং সংরক্ষণ করার অনুমতি দেয়৷
সেশনগুলি সাধারণত ক্লায়েন্ট সাইডে একটি অনন্য সেশন আইডি সংরক্ষণ করে কাজ করে, সাধারণত একটি কুকিতে। সার্ভার এই আইডি ব্যবহার করে একটি সেশন স্টোরেজ থেকে ব্যবহারকারীর সেশন সম্পর্কিত ডেটা পুনরুদ্ধার করতে, যেমন এই ব্লগে Redis, প্রতিবার ব্যবহারকারী সাইটের সাথে ইন্টারঅ্যাক্ট করে।
একটি ওয়েব অ্যাপ্লিকেশনে সেশন হল নিম্নলিখিত ব্যবহারকারীর মিথস্ক্রিয়া এবং রাষ্ট্র পরিচালনা পরিচালনা করার একটি দুর্দান্ত উপায়:
- ব্যবহারকারীর প্রমাণীকরণ :সেশনগুলি ব্যবহারকারীদের প্রমাণীকরণ করতে এবং পৃষ্ঠাগুলিতে বা এমনকি রিফ্রেশ করার পরেও তাদের লগ-ইন অবস্থা মনে রাখতে সহায়তা করে৷
- ব্যক্তিগতকরণ :সেশনগুলি সার্ভারকে ব্যবহারকারীর পছন্দ, প্রমাণীকরণ স্থিতি ইত্যাদির মতো ডেটা সংরক্ষণ এবং পুনরুদ্ধার করার অনুমতি দেয়৷
- নিরাপত্তা :সঠিক সেশন ম্যানেজমেন্ট অ্যাপের নিরাপত্তা বাড়াতে পারে, যেমন CSRF থেকে রক্ষা করা এবং অননুমোদিত ব্যবহারকারীরা সীমাবদ্ধ এলাকায় অ্যাক্সেস না করে তা নিশ্চিত করা।
সেশন ম্যানেজমেন্টের জন্য রিডিস কেন?
কেন না :)
সেশন ম্যানেজমেন্টের জন্য সেশন স্টোর হিসাবে Redis ব্যবহার করার একাধিক কারণ রয়েছে। রেডিসের গঠন থেকে উদ্ভূত কিছু সুবিধা এখানে রয়েছে:
-
ডেটা আর্কিটেকচার :রেডিস একটি ইন-মেমরি কী-ভ্যালু স্টোর। কী-মান জোড়া হ্যাশে সংরক্ষণ করা যেতে পারে, যেখানে হ্যাশ হল একটি রেকর্ড টাইপ যা ফিল্ড-মানের জোড়ার সংগ্রহ হিসাবে গঠন করা হয়। এই কাঠামোটি সেশন ম্যানেজমেন্ট ডেটা টাইপের সাথে পুরোপুরি ফিট করে যাতে ব্যবহারকারীর নাম, ব্যবহারকারীর পছন্দ ইত্যাদি সমস্ত সেশন ডেটা বজায় রাখা যায়।
-
ডেটা মেয়াদ শেষ :মেয়াদোত্তীর্ণ ডেটা মুছে ফেলার জন্য Redis-এর একটি অন্তর্নির্মিত কার্যকারিতা রয়েছে৷ এটি ওয়েব অ্যাপ্লিকেশনগুলিকে ব্যবহারকারীর সেশনের সময়সীমাবদ্ধ রাখতে সাহায্য করে৷
-
কম লেটেন্সি :এর "ইন-মেমরি" প্রকৃতির কারণে, রেডিস অত্যন্ত দ্রুত। এজন্য এটি সাধারণত ব্যবহারকারীর সেশন এবং ক্যাশে ডেটার জন্য ব্যবহৃত হয়।
-
মাপযোগ্যতা :রেডিস প্রচুর পরিমাণে ডেটা এবং উচ্চ-থ্রুপুট ট্র্যাফিক পরিচালনা করার জন্য তৈরি করা হয়েছে৷
এছাড়াও, আমরা আমাদের ওয়েব অ্যাপ্লিকেশনগুলিতে কোন পদ্ধতি অনুসরণ করতে চাই তা নির্ধারণ করতে ব্যবহারকারীর সেশন ডেটা, ক্লায়েন্ট-সাইড কুকিজ সংরক্ষণের সবচেয়ে সাধারণ উপায়গুলির মধ্যে একটির সাথে আমরা রেডিস-এর তুলনা করতে পারি। ক্লায়েন্ট-সাইড কুকিজের উপর সেশন স্টোরেজ হিসাবে Redis-এর কিছু সুবিধা:
-
ব্যবহারকারী টেম্পারিংয়ের জন্য কম ঝুঁকিপূর্ণ :কুকিজ ব্যবহারকারীদের কাছে দৃশ্যমান এবং ব্যবহারকারীর দ্বারা ব্যবহারযোগ্য। Redis আমাদের ব্যবহারকারীদের দ্বারা ব্যবহার করা থেকে ব্যবহারকারীর ডেটা রক্ষা করার অনুমতি দেয়৷
-
ক্লায়েন্ট এবং সার্ভারের মধ্যে কম ডেটা স্থানান্তরিত হয়: যেহেতু আমরা সেশনের সমস্ত তথ্য Redis-এ সঞ্চয় করি, তাই আমাদের ক্লায়েন্ট মেশিনে কিছু সংরক্ষণ করার দরকার নেই।
-
ক্লায়েন্ট মেশিনে শুধুমাত্র "SessionId" সংরক্ষণ করা হচ্ছে: আমরা যদি Redis ব্যবহার করি, তাহলে এই অনুরোধটি কোন সেশনে তা জানার জন্য প্রতিটি অনুরোধের জন্য আমাদের শুধুমাত্র সেশনআইডি প্রয়োজন।
Upstash Redis ডেটাবেস তৈরি করা হচ্ছে
Upstash Redis সেটআপে ঝাঁপিয়ে পড়ার আগে, আমাদের প্রথমে Upstash Redis এর সুবিধাগুলো বুঝতে হবে। আমরা যে সরঞ্জামগুলি ব্যবহার করতে যাচ্ছি সেগুলি কেন ব্যবহার করা উচিত তা না বুঝে ব্যবহার করার কোনও মানে হয় না, তাই না?
চলুন দেখি Upstash Redis ব্যবহারের প্রধান সুবিধাগুলো:
-
সার্ভারহীন: Upstash Redis একটি সার্ভারহীন ডাটাবেস। আপনাকে অবকাঠামো বজায় রাখতে হবে না, ডাটাবেসের স্কেলিং বা অন্য কোনো নিম্ন-স্তরের কনফিগারেশন নিয়ে চিন্তা করতে হবে না। আপনি শুধু ডাটাবেস তৈরি করুন এবং এটি ব্যবহার করুন।
-
গ্লোবাল ডেটা ডিস্ট্রিবিউশন: আপস্ট্যাশ আপনাকে আপনার ব্যবহারকারীদের কাছাকাছি অঞ্চলে আপনার Redis দৃষ্টান্ত স্থাপন করার অনুমতি দেয়, লেটেন্সি আরও কমিয়ে দেয়। এটি বিশ্বব্যাপী বিতরণ করা অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে উপকারী, ব্যবহারকারীর অবস্থান নির্বিশেষে সেশন স্টোরেজ দ্রুত এবং প্রতিক্রিয়াশীল তা নিশ্চিত করে৷
-
যেমন যেতে হবে সেভাবে অর্থ প্রদান করুন: কোন প্রবেশ মূল্য নেই. আপনি যা ব্যবহার করেন তার জন্যই আপনি অর্থ প্রদান করেন। আপনি মূল্যের বিবরণ দেখতে পারেন।
ঠিক আছে, সেশন পরিচালনার জন্য আমরা কেন Upstash Redis ব্যবহার করি সে সম্পর্কে আমাদের আর কোন প্রশ্ন না থাকলে, আমরা Upstash Redis ডাটাবেস তৈরি করতে পারি।
আমরা Upstash কনসোলের মাধ্যমে একটি Redis ডাটাবেস তৈরি করব।
আসুন "ডেটাবেস তৈরি করুন" বোতামে ক্লিক করে একটি রেডিস ডাটাবেস তৈরি করি। একটি Upstash Redis ডাটাবেস তৈরি করা কতটা সহজ এবং দ্রুত এই টিউটোরিয়ালটি আবার দেখাবে৷
প্রদর্শিত মডেলটিতে, আমরা আমাদের ডাটাবেসের জন্য একটি নাম নির্বাচন করব এবং এটির জন্য একটি অঞ্চল নির্বাচন করব। আপনার পরিষেবার সাথে একই অঞ্চল নির্বাচন করা ভাল হতে পারে৷
৷পরবর্তী বোতামে ক্লিক করার পরে, আমরা মূল্য পরিকল্পনা নির্বাচন করব। সর্বোচ্চ বাজেটের সীমার সাথে যেতেই পেমেন্ট করুন আমার প্রিয়!
এখন, আমাদের রেডিস ডাটাবেস প্রস্তুত। আমরা রেডিস ড্যাশবোর্ডে ডাটাবেস এন্ডপয়েন্ট, ডাটাবেসের সাথে সংযোগ করার পাসওয়ার্ড এবং এর পোর্ট দেখতে পারি। আমরা যখন ওয়েব অ্যাপ্লিকেশন থেকে ডাটাবেসের সাথে সংযোগ করতে চাই তখন আমাদের এই তথ্যের প্রয়োজন হবে৷

এটাই!
Nextjs অ্যাপে Upstash Redis ব্যবহার করা
আসুন দেখি কিভাবে রেডিস ওয়েব অ্যাপ্লিকেশন পরিকাঠামোর মধ্যে কাজ করবে:
-
আমরা প্রথমে কোনো সেশনআইডি ছাড়াই ক্লায়েন্ট ব্রাউজার থেকে অনুরোধ পাই।
-
যেহেতু অনুরোধে কোনো সেশনআইডি নেই, তাই আমরা একটি সেশনআইডি তৈরি করি এবং রেডিসে একটি হ্যাশ তৈরি করি।
-
ক্লায়েন্ট মেশিনের প্রতিক্রিয়ায় কুকি হিসাবে সেশনআইডি ফেরত দিন।
-
যখন আমরা সেশনআইডি সহ একটি নতুন HTTP অনুরোধ পাই, তখন আমরা Redis থেকে প্রয়োজনীয় সেশন ডেটা পুনরুদ্ধার করি এবং ক্লায়েন্টকে সাড়া দেওয়ার সময় এটি ব্যবহার করি।
এখানে পরিষেবাটির সিকোয়েন্স ডায়াগ্রাম এবং প্রক্রিয়াটিকে আরও ভালভাবে কল্পনা করার জন্য রেডিসের সাথে এর সংযোগ রয়েছে:

সবকিছু ঠিক থাকলে, আপনার কাছে একটি Nextjs অ্যাপ না থাকলে আমরা টার্মিনালে নিম্নলিখিত কমান্ডটি চালিয়ে একটি Nextjs অ্যাপ তৈরি করতে পারি।
npx create-next-app@latest <project-name>
এখন আমাদের Upstash Redis Typescript SDK ইনস্টল করতে হবে।
cd <project-name>
npm install @upstash/redis
প্রয়োজনীয় নির্ভরতা ইনস্টল করার পরে, আমরা এখন ব্যবহারকারীর ব্রাউজারের কুকিতে সেশন আইডি পরিচালনা করার জন্য একটি ইন্টারফেস তৈরি করতে পারি এবং আমাদের অ্যাপের সেশন স্টোরেজ Upstash Redis-এর সাথে ইন্টারফেস করতে পারি।
আমরা এই ইন্টারফেসটি /app/lib/sessionManager.tsx এ প্রয়োগ করব ফাইল।
import { Redis } from '@upstash/redis'
import { cookies } from 'next/headers'
export const redis = new Redis({
url: '<UPSTASH-REDIS-URL>',
token: 'UPSTASH-REDIS-TOKEN',
})
type SessionId = string;
type Key = 'userName' | 'sessionStatus'; // other keys of the session data can be added.
export async function getSessionId(): SessionId | undefined {
const cookieStore = await cookies();
return cookieStore.get("session-id")?.value;
}
async function setSessionId(sessionId: SessionId): void {
const cookieStore = await cookies();
cookieStore.set("session-id", sessionId);
}
export async function getSessionIdAndCreateIfMissing() {
const sessionId = await getSessionId();
if (!sessionId) {
const newSessionId = crypto.randomUUID();
await setSessionId(newSessionId);
return newSessionId;
}
return sessionId;
}
export async function get(key: Key, username: string = "") {
const sessionId = await getSessionId();
if (!sessionId) {
return null;
}
return await redis.hget(`session-${username}-${sessionId}`, key);
}
export async function getAll(username: string = "") {
const sessionId = await getSessionId();
if (!sessionId) {
return null;
}
return await redis.hgetall(`session-${username}-${sessionId}`);
}
export async function set(key: Key, value: string, username: string = "") {
const sessionId = await getSessionIdAndCreateIfMissing();
await redis.hset(`session-${username}-${sessionId}`, { [key]: value });
return redis.expire(`session-${username}-${sessionId}`, 900);
} আসুন এই ফাংশনগুলি পরীক্ষা করি।
-
getSessionId :আমরা ব্যবহারকারীদের ব্রাউজারগুলির কুকিগুলিতে সেশন আইডি সংরক্ষণ করব৷ এই ফাংশনটি হল HTTP কলের ভিতরে API এ পাঠানো ব্রাউজার কুকি থেকে সেশন আইডি পাওয়া।
-
সেশন আইডি সেট করুন :এই ফাংশনটি সেশন আইডি কুকিকে প্রদত্ত সেশন আইডি প্যারামিটারে সেট করে।
-
getSessionIdAndCreateIfMissing :এই ফাংশনটি
getSessionIdকে কল করে কুকিজ থেকে বিদ্যমান সেশন আইডি পেতে এবং ব্যবহারকারীর ব্রাউজারে ইতিমধ্যে একটি সেশন আইডি না থাকলে নতুন র্যান্ডম UUID-কে নতুন সেশন আইডি হিসেবে সেট করে। এই ফাংশনটি ব্রাউজারে ফেরত পাঠানোর জন্য কুকিগুলিতে নতুন সেশন আইডি যোগ করে। -
সেশনডেটা পান :আমরা Redis থেকে সেশন ডেটা পেতে এই ফাংশনটিকে কল করব। এটি আপস্ট্যাশ রেডিস থেকে প্রদত্ত কীটির সেশন ডেটা পাবে এবং এটি ফেরত দেবে।
-
GetAllSessionData :এই ফাংশনটি সমস্ত সেশন ডেটা পায়। এটি Upstash Redis থেকে সেশন হ্যাশের সমস্ত কী-মান জোড়া পায়।
-
সেশনডেটা সেট করুন :আমরা এই ফাংশনে প্রদত্ত সেশনের কী-মান জোড়া সেট করব।
যেহেতু ইউটিলিটি ফাংশনগুলি Upstash Redis এর মাধ্যমে সেশন আইডি এবং সেশন স্টোরেজ পরিচালনা করার জন্য, আমরা এখন একটি API প্রয়োগ করতে পারি যা এই ফাংশনগুলি ব্যবহার করে৷
এপিআই খুব সহজ হবে। এটি পথ থেকে ব্যবহারকারীর নাম গ্রহণ করবে। একবার এটি একটি অনুরোধ গ্রহণ করলে, এটি প্রথমে কুকিগুলিতে সেশন আইডি বিদ্যমান কিনা তা পরীক্ষা করবে। যদি কুকিগুলিতে কোন সেশন আইডি না থাকে তবে এটি একটি নতুন আইডি তৈরি করবে এবং প্রতিক্রিয়াতে কুকিগুলিতে সেট করবে। যদি সেশন আইডিটি বিদ্যমান থাকে, তাহলে এটি চেক করবে যে হ্যাশের Upstash Redis-এ একটি কী আছে কিনা যা সেশনের প্রতিনিধিত্ব করে। যদি না থাকে, এটি সেই হ্যাশে কী-মান জোড়া তৈরি করবে।
আসুন কোড করি!
এপিআই নেক্সটজেসের অ্যাপ রাউটার ব্যবহার করে তৈরি করা হবে।
আমাদের app/api/user/ এর অধীনে একটি ফাইল তৈরি করা উচিত [username]named route.tsx`।
import * as sessionStore from '../../lib/session'
export async function GET(request: Request,{ params }: { params: Promise<{ user: string }> }){
const userName = (await params).user;
const sessionId = await sessionStore.getSessionIdAndCreateIfMissing();
const sessionStatus = await sessionStore.get('sessionStatus', userName);
if(sessionStatus == null) {
console.log('There is no active session.');
await sessionStore.set('sessionStatus', 'ACTIVE', userName);
}
return Response.json({ userName: userName, sessionId: sessionId });
}
এই রুট ফাইলটি Nextj-কে <URL>:3000/api/user/<username>-এ পাঠানো অনুরোধের সমাধান করার অনুমতি দেবে নিজের ভিতরে সংজ্ঞায়িত HTTP পদ্ধতিতে।
এখন, আমরা এটি কর্মে দেখতে পাব। টার্মিনাল থেকে রুট ডিরেক্টরিতে গিয়ে এবং নিম্নলিখিত কমান্ডটি চালিয়ে Nextjs অ্যাপটি চালাই:
npm run dev
এখন, আমরা API এন্ডপয়েন্ট, http://localhost:3000/api/user/noah খুলতে পারি একটি ব্রাউজারে। যখন আপনি এটি খুলবেন, আপনি দেখতে পাবেন ব্যবহারকারীর নাম এবং সেশন আইডি ফিরে এসেছে:
{"userName":"noah","sessionId":"804814dc-10fc-4b0a-a4c1-321f4b54d399"}
আপনি যদি রাইট-ক্লিক করেন এবং পরিদর্শন করেন, আপনি "অ্যাপ্লিকেশন" ট্যাবে গিয়ে কুকিজের সেশন-আইডি সেট দেখতে পাবেন৷

ডাটাবেসে সেশন তৈরি হয়েছে কিনা আমরা Upstash Redis চেক করতে পারি। এটি পরীক্ষা করতে, আমাদের Upstash Redis কনসোলে ফিরে যেতে হবে, Redis ডাটাবেস খুলতে হবে এবং Data Browser খুলতে হবে। ট্যাব।
Data Browser ট্যাব নিচের মত সেশন ডেটা দেখাবে।

উপসংহার
Upstash Redis সহ একটি Next.js অ্যাপে সেশন পরিচালনা করা একটি মাপযোগ্য এবং দক্ষ সমাধান প্রদান করে। এই ব্লগ পোস্টে, আমরা একটি Nextjs অ্যাপ তৈরি করেছি এবং এটিকে সেশন ম্যানেজমেন্ট স্টোরেজ হিসেবে ব্যবহার করার জন্য Upstash Redis-এর সাথে একীভূত করেছি।
একটি Redis ডাটাবেস সেট আপ করে এবং এটিকে Next.js এর সাথে নির্বিঘ্নে সংহত করে, আপনি ঐতিহ্যগত সার্ভার-সাইড জটিলতা ছাড়াই কার্যকরভাবে সেশন স্টোরেজ পরিচালনা করতে পারেন। সেশন ম্যানেজমেন্টে পারফরম্যান্স এবং সরলতা খুঁজছেন এমন ডেভেলপারদের জন্য এই পদ্ধতিটি আদর্শ।
আশা করি, এই নির্দেশিকাটি আপনার Next.js অ্যাপ্লিকেশনগুলিতে একটি নির্ভরযোগ্য সেশন স্টোর হিসাবে Upstash Redis বাস্তবায়নের জন্য একটি পরিষ্কার পথ প্রদান করেছে৷