دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / نشست‌ها/سشن (PHP Sessions)

نشست‌ها/سشن (PHP Sessions)

30 دقیقه Article

نشست‌ها (Sessions): حافظه‌یِ امنِ سرور 🔐📁

برخلافِ کوکی که در کامپیوترِ کاربر است، نشست (Session) اطلاعات را در سرور ذخیره می‌کند. این روش بسیار ایمن‌تر است و برای سیستم‌هایِ لاگین استفاده می‌شود.

شروعِ نشست: session_start()

این دستور باید در اولین خطِ تمامِ فایل‌هایی که قرار است از سشن استفاده کنند قرار بگیرد.

{code_block('session_start();\n$_SESSION["userid"] = 125;')}

مزایایِ Session:

  • حجمِ داده‌یِ بیشتری نسبت به کوکی (۴ کیلوبایت) ذخیره می‌کند.
  • کاربر نمی‌تواند مقادیر را در سرور دستکاری کند.
  • با بستنِ مرورگر، به طورِ پیش‌فرض منقضی می‌شود.
Session ID: تنها چیزی که در کامپیوترِ کاربر ذخیره می‌شود، یک آی‌دیِ تصادفیِ طولانی است که به فایلِ متناظرش در سرور اشاره می‌کند.
Session Fixation: همیشه بعد از احرازِ هویتِ کاربر، آی‌دیِ سشن را با session_regenerate_id() عوض کنید تا از حملاتِ سرقتِ نشست جلوگیری شود.

پاکسازی کامل:

{code_block('session_unset(); // حذف متغیرها\nsession_destroy(); // حذف نشست')}
انقضایِ خودکار: می‌توانید در فایل php.ini تعیین کنید که اگر کاربر پس از مثلاً ۲۰ دقیقه فعالیتی نداشت، سشن به طورِ خودکار پاک شود.
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی پیشرفته و امنیت در PHP 🐘⚙️

درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرم‌افزار را رقم می‌زند.

۱. بهینه‌سازی I/O و بافرینگ

در هنگامِ کار با فایل‌هایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه می‌دهد فایل را خط به خط پردازش کنید که باعث می‌شود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.

۲. امنیتِ نشست‌ها (Session Security)

مهم‌ترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسه‌یِ نشستِ قبلی باطل شود. همچنین فلگ‌هایِ HttpOnly و Secure را برای کوکی‌ها فعال کنید.

۳. استانداردهایِ مدرن و Autoloading

در پروژه‌هایِ بزرگ، استفاده از include دستی فاجعه‌بار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه می‌دهد کلاس‌ها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا می‌برد.

نکته استراتژیک: به جایِ استفاده از توابعِ سنتی، سعی کنید به سمتِ Object-Oriented Programming (OOP) حرکت کنید. اکثرِ کتابخانه‌هایِ پیشرفته‌یِ PHP مثل DateTime و PDO از این پارادایم استفاده می‌کنند.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

شروع و ذخیره سشن Medium
سوال تمرین

ابتدا سشن را شروع کنید، سپس متغیری به نام "status" با مقدار "logged_in" در آن ذخیره کنید.

پاسخ تمرین
PHP
<?php
session_start();
$_SESSION["status"] = "logged_in";
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.