ডিফল্টভাবে, প্রতিটি ওয়েব রিকোয়েস্ট সম্পূর্ণ স্বাধীন — একটি সার্ভারের কিছুক্ষণ আগে কে visit করেছিল তার কোনো স্মৃতি নেই। সেশন আর কুকি হলো সেই দুটো টুল যা PHP এই ফাঁকটা পূরণ করতে দেয়, আর এরা এটা ভিন্নভাবে সমাধান করে।
এই দুটো ছাড়া, একটি ওয়েবসাইট পাতার মধ্যে আপনাকে লগইন রাখতে পারত না, আপনার শপিং কার্টে কী আছে মনে রাখতে পারত না, বা একটি ভাষার পছন্দ মনে রাখতে পারত না। প্রতিটি রিকোয়েস্ট সম্পূর্ণ খালি অবস্থা থেকে শুরু হতো।
একটি কুকি হলো ছোট একটি ডেটা যা PHP visitor-এর ব্রাউজারকে সংরক্ষণ করতে বলে, যা ব্রাউজার তারপর সেই সাইটের প্রতিটি ভবিষ্যৎ রিকোয়েস্টে স্বয়ংক্রিয়ভাবে ফেরত পাঠায়:
<?php
// Set a cookie that lasts 30 days
setcookie("username", "Priya", time() + (30 * 24 * 60 * 60));
// On a later request:
echo $_COOKIE["username"] ?? "No cookie set";
?>কুকি অবশ্যই যেকোনো আউটপুটের আগে সেট করতে হবে
setcookie() অবশ্যই যেকোনো HTML বা অন্য আউটপুটের আগে কল করতে হবে — এমনকি ফাইলে <?php-এর আগে একটি একক খালি লাইনও একটি "headers already sent" এরর তৈরি করতে যথেষ্ট, কারণ কুকি HTTP হেডার হিসেবে পাঠানো হয়।
একটি সেশন এর বদলে ডেটা সার্ভারে রাখে, আর visitor-কে শুধু একটি ছোট ID পাঠায় যা সেটার দিকে নির্দেশ করে — মানে আসল ডেটা visitor-এর ব্রাউজারের মধ্য দিয়ে একেবারেই যায় না, যা স্পর্শকাতর যেকোনো কিছুর জন্য গুরুত্বপূর্ণ।
<?php
session_start(); // must be the very first thing in the script
$_SESSION["username"] = "Priya";
// On a later request, after session_start() again:
echo $_SESSION["username"] ?? "Not logged in";
?>session_start()-এরও setcookie()-এর মতো "যেকোনো আউটপুটের আগে" শর্ত আছে, আর যে পাতাটি সেশন তৈরি করেছে শুধু সেটাতেই নয়, সেশন অ্যাক্সেস করতে চায় এমন প্রতিটি পাতাতেই এটি চালাতে হয়।
| ডেটা কোথায় থাকে | কীসের জন্য ভালো | |
|---|---|---|
| কুকি | visitor-এর ব্রাউজার | অ-স্পর্শকাতর পছন্দ (থিম, ভাষা) যা ব্রাউজার বন্ধ করার পরেও টিকে থাকা উচিত |
| সেশন | সার্ভার | লগইন স্টেট, কার্টের কন্টেন্ট — যা স্পর্শকাতর বা ব্রাউজার থেকে পরিবর্তনযোগ্য হওয়া উচিত নয় |
<?php
session_start();
session_destroy(); // used for a "log out" action
?>