Session Management হল একটি গুরুত্বপূর্ণ প্রক্রিয়া, যেখানে সার্ভলেট অ্যাপ্লিকেশন ব্যবহারকারীর তথ্য একাধিক রিকোয়েস্ট এবং সেশনজুড়ে ধরে রাখে। HTTP প্রোটোকল একটি stateless প্রোটোকল, অর্থাৎ, প্রতিটি রিকোয়েস্ট আলাদাভাবে প্রক্রিয়াকৃত হয় এবং এক রিকোয়েস্টের তথ্য অন্য রিকোয়েস্টে সংরক্ষিত থাকে না। তবে Session Management এর মাধ্যমে, আপনি ব্যবহারকারীর তথ্য (যেমন লগইন স্ট্যাটাস, শপিং কার্ট, পছন্দ) একাধিক রিকোয়েস্টের মধ্যে সংরক্ষণ করতে পারেন।
Servlets এ সেশন ম্যানেজমেন্ট করতে সাধারণত HttpSession অবজেক্ট ব্যবহার করা হয়, যা ব্যবহারকারীর তথ্য সংরক্ষণ করে এবং রিকোয়েস্ট এবং রেসপন্সের মধ্যে সেই তথ্য ধরে রাখে।
1. Session Management এর ধারণা
Session হল একটি নির্দিষ্ট সময়ের মধ্যে ব্যবহারকারীর কার্যকলাপ সংরক্ষণ করার একটি পদ্ধতি। যখন ব্যবহারকারী প্রথমবার সার্ভারে লগইন করেন বা অ্যাপ্লিকেশনে প্রবেশ করেন, তখন সার্ভার একটি session ID জেনারেট করে যা ব্যবহারকারীর জন্য একক এবং অনন্য হয়। এই session ID ব্যবহারকারীর ব্রাউজারে কুকি হিসেবে সংরক্ষিত হয় এবং প্রতিটি রিকোয়েস্টের সঙ্গে এটি সার্ভারে পাঠানো হয়।
সার্ভলেট কন্টেইনার HttpSession অবজেক্টে ব্যবহারকারীর সেশন সংরক্ষণ করে এবং ব্যবহারকারী যতবার ওয়েব অ্যাপ্লিকেশনটি অ্যাক্সেস করে, ততবার সেশনটি ব্যবহার করা যায়।
2. HttpSession ব্যবহার করে Session Management
2.1 Session তৈরী করা এবং তথ্য সংরক্ষণ
Servlets-এ HttpSession অবজেক্ট ব্যবহার করে সেশন তৈরি এবং সেশন ডেটা সংরক্ষণ করা হয়। এটি সাধারণত request.getSession() মেথডের মাধ্যমে তৈরি করা হয়।
উদাহরণ:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SessionDemoServlet extends HttpServlet {
// doGet() মেথড যা HTTP GET রিকোয়েস্ট হ্যান্ডেল করে
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Create a new session or get the existing one
HttpSession session = request.getSession(true);
// Store data in the session
session.setAttribute("userName", "JohnDoe");
// Get the session ID
String sessionId = session.getId();
// Set content type
response.setContentType("text/html");
// Get the PrintWriter object to write the response
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Session ID: " + sessionId + "</h1>");
out.println("<h2>Welcome, " + session.getAttribute("userName") + "!</h2>");
out.println("</body></html>");
}
}
এখানে:
- request.getSession(true): এটি একটি নতুন সেশন তৈরি করে যদি এটি আগে তৈরি না হয়ে থাকে। যদি সেশন পূর্বে তৈরি থাকে, তাহলে এটি সেই সেশনটি ফিরিয়ে দেবে।
- session.setAttribute("userName", "JohnDoe"): এখানে সেশনের মধ্যে "userName" নামক একটি তথ্য সংরক্ষণ করা হয়েছে।
- session.getId(): এটি সেশনের আইডি রিটার্ন করে।
2.2 Session থেকে তথ্য পেতে
যখন সেশন তৈরি হয়ে যায় এবং ব্যবহারকারী একাধিক রিকোয়েস্ট পাঠায়, তখন আপনি সেশনের মধ্যে সংরক্ষিত তথ্য পুনরুদ্ধার করতে পারেন।
উদাহরণ:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SessionDisplayServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get the existing session
HttpSession session = request.getSession(false);
// If a session exists, retrieve the stored attribute
if (session != null) {
String userName = (String) session.getAttribute("userName");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Welcome Back, " + userName + "!</h1>");
out.println("</body></html>");
} else {
response.getWriter().println("No session exists.");
}
}
}
এখানে:
- request.getSession(false): এটি বর্তমান সেশনটি ফেরত দেবে যদি এটি পূর্বে তৈরি হয়ে থাকে, অন্যথায় এটি
nullরিটার্ন করবে। - session.getAttribute("userName"): এটি সেশন থেকে "userName" তথ্যটি পুনরুদ্ধার করবে।
3. Session শেষ করা বা Invalidating করা
Session অবজেক্টটি নির্দিষ্ট সময় পর timeout হয়ে যেতে পারে, অথবা আপনি এটি ম্যানুয়ালি শেষ (invalidate) করতে পারেন। যখন আপনি সেশনটি অবৈধ (invalidate) করেন, তখন সেশন সম্পর্কিত সব ডেটা মুছে ফেলা হয়।
উদাহরণ:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class SessionInvalidateServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get the existing session
HttpSession session = request.getSession(false);
if (session != null) {
// Invalidate the session
session.invalidate();
response.getWriter().println("Session has been invalidated.");
} else {
response.getWriter().println("No session to invalidate.");
}
}
}
এখানে:
- session.invalidate(): এটি সেশনকে অবৈধ (invalidate) করে এবং সেশন সম্পর্কিত সব ডেটা মুছে দেয়।
4. Session Timeout কনফিগারেশন
Session Timeout হল সেই সময় সীমা যার পরে সেশন স্বয়ংক্রিয়ভাবে শেষ হয়ে যায়। এটি সাধারণত web.xml কনফিগারেশন ফাইলে নির্ধারণ করা হয়।
উদাহরণ: web.xml কনফিগারেশন
<web-app>
<session-config>
<session-timeout>30</session-timeout> <!-- Timeout in minutes -->
</session-config>
</web-app>
এখানে:
- 30: এই কনফিগারেশনের মাধ্যমে সেশন ৩০ মিনিট পর স্বয়ংক্রিয়ভাবে শেষ হয়ে যাবে।
5. সারাংশ
Session Management সার্ভলেট প্রযুক্তির একটি গুরুত্বপূর্ণ অংশ, যা ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহারকারীর তথ্য সংরক্ষণ করে। HttpSession অবজেক্ট ব্যবহার করে সার্ভলেট অ্যাপ্লিকেশনগুলো বিভিন্ন তথ্য যেমন ইউজার আইডি, লগইন স্ট্যাটাস, এবং শপিং কার্ট ইত্যাদি একাধিক রিকোয়েস্টের মধ্যে ধরে রাখতে পারে। সার্ভলেটের মাধ্যমে সেশন তৈরি করা, তথ্য সংরক্ষণ, সেশন থেকে তথ্য পুনরুদ্ধার এবং সেশন অবৈধ করা খুবই সহজ। Session Timeout এবং Session Invalidating সার্ভলেট অ্যাপ্লিকেশনের সেশন ম্যানেজমেন্ট কার্যক্রম আরও কার্যকরী এবং নিরাপদ করে তোলে।
Read more