نشستها/سشن (PHP Sessions)
نشستها (Sessions): حافظهیِ امنِ سرور 🔐📁
برخلافِ کوکی که در کامپیوترِ کاربر است، نشست (Session) اطلاعات را در سرور ذخیره میکند. این روش بسیار ایمنتر است و برای سیستمهایِ لاگین استفاده میشود.
شروعِ نشست: session_start()
این دستور باید در اولین خطِ تمامِ فایلهایی که قرار است از سشن استفاده کنند قرار بگیرد.
{code_block('session_start();\n$_SESSION["userid"] = 125;')}مزایایِ Session:
- حجمِ دادهیِ بیشتری نسبت به کوکی (۴ کیلوبایت) ذخیره میکند.
- کاربر نمیتواند مقادیر را در سرور دستکاری کند.
- با بستنِ مرورگر، به طورِ پیشفرض منقضی میشود.
session_regenerate_id() عوض کنید تا از حملاتِ سرقتِ نشست جلوگیری شود.
پاکسازی کامل:
{code_block('session_unset(); // حذف متغیرها\nsession_destroy(); // حذف نشست')}php.ini تعیین کنید که اگر کاربر پس از مثلاً ۲۰ دقیقه فعالیتی نداشت، سشن به طورِ خودکار پاک شود.
بخش تخصصی: مهندسی پیشرفته و امنیت در PHP 🐘⚙️
درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرمافزار را رقم میزند.
۱. بهینهسازی I/O و بافرینگ
در هنگامِ کار با فایلهایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه میدهد فایل را خط به خط پردازش کنید که باعث میشود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.
۲. امنیتِ نشستها (Session Security)
مهمترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسهیِ نشستِ قبلی باطل شود. همچنین فلگهایِ HttpOnly و Secure را برای کوکیها فعال کنید.
۳. استانداردهایِ مدرن و Autoloading
در پروژههایِ بزرگ، استفاده از include دستی فاجعهبار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه میدهد کلاسها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا میبرد.
DateTime و PDO از این پارادایم استفاده میکنند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
ابتدا سشن را شروع کنید، سپس متغیری به نام "status" با مقدار "logged_in" در آن ذخیره کنید.
<?php
session_start();
$_SESSION["status"] = "logged_in";
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.