পিএইচপি - সেশন
এই অধ্যায়ে আপনি পিএইচপি সেশন সম্মন্ধে জানবেন। সেশন হলো ভ্যারিয়েবলের মধ্যে তথ্য সংরক্ষণ করার একটি উপায় যা একাধিক পেজে ব্যবহার করা যায়।
এই তথ্য গুলো ব্যবহারকারীর কম্পিউটারে সংরক্ষিত হয় না, বরং সার্ভারে সংরক্ষিত হয়।
পিএইচপি সেশন কি?
আপনি যখন একটি এপ্লিকেশন দিয়ে আপনার প্রয়োজনীয় কাজ করতে চান তখন প্রথমেই এটিকে চালু করেন, তারপর এর মধ্যে কিছু কাজ করেন, পরিশেষে এটিকে বন্ধ করে দেন। সেশন অনেকটা এই রকমই।
আপনার কম্পিউটার জানে আপনি কে। এটি এও জানে আপনি কখন এপ্লিকেশনটি চালু করেছেন এবং কখন বন্ধ করেছেন। কিন্তু অনলাইনের সমস্যা হলো ওয়েব সার্ভার জানে না আপনি কে অথবা আপনি কি করতে চান। কারন HTTP এড্রেস এ ব্যবহারকারী(user) সম্পর্কিত কোনো তথ্য থাকে না।
সেশন ভ্যারিয়েবল ব্যবহারকারীর username, name, password ইত্যাদি তথ্য সংরক্ষন করে রাখে যা একাধিক পেজে ব্যবহার করা যায়। একজন ব্যবহারকারী ব্রাউজার বন্ধ করার আগ পর্যন্ত সেশন ভ্যারিয়েবল ডিফল্টভাবে সংশ্লিষ্ট তথ্য সংরক্ষন করে রাখে।
সুতরাং সেশন ভ্যারিয়েবল একজন ব্যবহারকারীর তথ্য সংরক্ষন করে রাখে যা শুধুমাত্র ঐ এপ্লিকেশনে অবস্থিত সকল পেজে ব্যবহার করা যায়।
বিঃদ্রঃ আপনি যদি তথ্যসমূহ স্থায়ীভাবে সংরক্ষন করতে চান তাহলে ডাটাবেসে সংরক্ষন করুন।
পিএইচপি সেশন কিভাবে শুরু হয়?
session_start()
ফাংশনের মাধ্যমে একটি সেশন শুরু হয়।
পিএইচপি সুপার গ্লোবাল ভ্যারিয়েবল $_SESSION দ্বারা সেশন ভ্যারিয়েবল গুলোকে সেট করতে হয়।
চলুন "test_session1.php" নামে একটি নতুন পেজ তৈরি করি। এই পেজে আমরা একটি নতুন পিএইচপি সেশন শুরু করবো এবং কিছু সেশন ভেবিয়েবল সেট করবোঃ
<?php
// সেশন শুরু
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি সেশন উদাহরণ </title>
</head>
<body>
<?php
// সেশন ভ্যারিয়েবল সেট
$_SESSION["userName"] = "tamim";
$_SESSION["pass"] = "2017";
echo "সেশন ভ্যরিয়েবল সেট করা হয়েছে।";
?>
</body>
</html>
বিঃদ্রঃ মনে রাখবেন, session_start() ফাংশনটি ডকুমেন্টের প্রথম লাইনে লিখতে হবে।
কিভাবে পিএইচপি সেশন ভ্যারিয়েবলের মান পাবেন?
এখন আমরা "test_session2.php" নামে আরেকটি পেজ তৈরি করবো। এই পেজ থেকে আমরা সেশনের তথ্যসমূহ এক্সেস করবো যা আমরা প্রথমে "test_session1.php" পেজে সেট করেছিলাম।
একটু লক্ষ্য করলে আপনি দেখবেন, সেশন ভেরিয়েবলগুলো প্রতিটি নতুন পৃষ্ঠায় স্বতন্ত্রভাবে অতিক্রম হচ্ছে না, এই জন্য আপনাকে প্রতিটি পেজের প্রথমেই session_start() ফাংশনটি শুরু করতে হবে।
লক্ষ্য করলে আপনি আরও দেখবেন যে, প্রতিটি সেশন ভ্যারিয়েবলের মান সুপার গ্লোবাল ভ্যারিয়েবল $_SESSION এর মধ্যে সংরক্ষিত হয়ঃ
<?php
//সেশন শুরু
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি সেশন উদাহরণ</title>
</head>
<body>
<?php
// আমরা এখন পূর্বে সেটকৃত সেশন ভ্যারিয়েবল এর আউটপুট নিব
echo " ব্যবহারকারীর নামঃ " . $_SESSION["userName"] . "। <br>";
echo " এবং পাসওয়ার্ডঃ " . $_SESSION["pass"] . "।";
?>
</body>
</html>
একজন ব্যবহারকারীর সবগুলো সেশন ভ্যারিয়েবলের মান দেখার জন্য আপনি print_r($_SESSION); ফাংশন ব্যবহার করতে পারেন।
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি সেশন উদাহরণ</title>
</head>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
সেশন কিভাবে কাজ করে এবং কীভাবে জানতে পারে যে এটাই আপনি?
বেশীরভাগ সেশনই ইউজার কম্পিউটারে ইউজার এর একটি কী(key) সেট করে যা দেখতে কিছুটা 61n3ika5vtee9ro9lb04rqngf6 এর মত। তারপরে যখন অন্য একটি পেজে সেশনটি ওপেন করা হয়, তখন এটি ইউজার কী এর জন্য কম্পিউটারটিকে স্ক্যান করে। এটি যদি পূর্বের কোনো সেশনের সাথে মিল খুঁজে পায় তাহলে সেটিকে অ্যাক্সেস করে।
আর যদি কোনো মিল খুঁজে না পায় তাহলে একটি নতুন একটি সেশন তৈরি করে।
পিএইচপি সেশন ভ্যারিয়েবল কিভাবে পরিবর্তন করা হয়?
ওভাররাইট(overwrite) করার মাধ্যমে আপনি সেশন ভ্যারিয়েবল পরিবর্তন করতে পারবেনঃ
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি সেশন উদাহরণ</title>
</head>
<body>
<?php
// সেশন ভ্যারিয়েবল ওভার রাইট
$_SESSION["userName"] = "tahmid";
print_r($_SESSION);
?>
</body>
</html>
পিএইচপি সেশন বাতিল করা
সকল গ্লোবাল সেশন ভ্যারিয়েবলগুলো রিমুভ এবং বাতিল করতে যথাক্রমে session_unset() এবং session_destroy() ফাংশন ব্যবহার করতে হবেঃ
<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>পিএইচপি সেশন উদাহরণ</title>
</head>
<body>
<?php
// সেশনের সকল ভ্যারিয়েবলকে রিমুভ করবে
session_unset();
// সেশন বাতিল করবে
session_destroy();
echo "সকল সেশন ভ্যারিয়েবল রিমুভ এবং বাতিল হয়েছে";
?>
</body>
</html>
উপরের উদাহরনে session_unset() এবং session_destroy() ফাংশন ব্যবহার করার ফলে সবগুলো সেশন ভ্যারিয়েবল মুছে গেছে, তাই কোড রান করালে ফলাফল হিসাবে কিছুই দেখাবে না।