$_SESSION یک آرایه مخصوص برای ذخیره درخواست های کاربر در حین بازدید از سایت یا اپلیکیشن شما است. به این معنی که شما با استفاده از سشن ها میتوانید اطلاعات مورد نیاز خودتان را برای هر کاربر ذخیره کنید و در حین بازدید کاربر از سایتتان از آنها استفاده کنید.
برخلاف کوکی ها که در کامپیوتر کاربر ذخیره میشوند سشن ها در سرور ایجاد میشوند و امنیت خیلی بیشتری نسبت به کوکی ها دارند.
استفاده از سشن ها میتواند بسیار پیچیده و یا خیلی ساده باشد. یک مثال ساده و کاربردی استفاده از سشن ها این است: برای مثال در نظر بگیرید برای ثبت نام کاربر باید چندین فرم را پر کند که چند صفحه جدا از هم هستند. به این ترتیب شما میتوانید اطلاعات هر صفحه را داخل سشن کاربر ذخیره کنید سپس در فرم صفحه آخر همه اطلاعات را به صورت یکجا درون دیتابیس ذخیره کنید.
در این مطلب با هم به نحوه ایجاد سشن ها و از بین بردن آنها و نکات امنیتی می پردازیم.
استفاده از Sessions
قبل از اینکه بتوانید اطلاعات مخصوص هر کاربر را داخل سشن مربوطه ذخیره کنید باید ابتدا سشن را آغاز کنید. اینکار باید ابتدای صفحه و قبل از هر گونه کد از قبیل HTML, JavaScript و یا PHP باشد. برای شروع یک سشن باید دستور زیر را در ابتدای فایل قرار داد:
?
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
۱۳
۱۴
۱۵
۱۶
۱۷
۱۸
۱۹
<?php
session_start();
$_SESSION["username"] = "Hamid";
[/php]
در کد بالا در خط دوم با استفاده از یک تابع, سشن را آغاز کردیم و در خط بعد داخل آرایه $_SESSION یک خانه به نام username ایجاد کرده و مقدار Hamid را داخل آن گذاشتیم.
اگر شما ابتدا سشن را آغاز نکنید نمیتوانید از آرایه $_SESSION برای ذخیره مقادیر خود استفاده کنید.
در فایل دوم دوباره سشن را آغاز میکنیم و مقدار username را که در فایل اول داخل سشن ذخیره کردیم را نمایش میدهیم. به صورت زیر:
[php]
<?php
session_start();
echo "Username: " . $_SESSION["username"];
[/php]
این یک نمونه بسیار ساده از ذخیره اطلاعات در سشن بود. برای مثال اگر شما در زمان ورود یک کاربر به سایت نام کاربری آن را داخل سشن ذخیره کنید در تمام صفحات دیگر نیز میدانید کدام نام کاربری در حال استفاده از سایت است و درخواست ها را با توجه به آن بررسی میکنید.
پایان یک سشن
خیلی مهم است که در زمانی که به اطلاعات داخل سشن احتیاجی ندارید آنها را از بین ببرید زیرا هم از لحاظ امنیتی مهم است و هم از انباشته شدن اطلاعات بیهوده بر روی سرور جلوگیری میکنید.
برای از بین بردن مقدار یک خانه از آرایه $_SESSION به صورت زیر عمل میکنیم:
[php]
unset($_SESSION[“username”]);
و برای از بین کل اطلاعات سشن میتوان از تابع زیر استفاده کرد:
?
۱
session_unset();
هر دو مثال بالا فقط روی اطلاعات داخل سشن تاثیر میگذارند نه روی خود سشن. اگر بخواهید یک سشن به طور کامل از بین برود برای مثال زمانی که کاربر log out میکند میتوانید از تابع زیر استفاده کنید:
?
۱
session_destroy();
زمانی که مطمئن هستید که دیگر به سشن احتیاج ندارید حتما آن را با استفاده از تابع بالا از بین ببرید زیرا در غیر اینصورت سشن شما همچنان فعال میماند و کدهای مخرب امکان آسیب رساندن به اطلاعات را پیدا میکنند.
نکات امنیتی
زمان سشن
زمان بندی از بین بردن یک سشن بسیار مهم است. اگر یک کاربر از طریق کافی نت به سایت یا اپلکیشن شما مراجعه و وارد ناحیه کاربری خودش شود و کافی نت را بدون اینکه از سایت log out کند ترک کند چگونه باید سشن را نابود کرد که کاربر بعدی کافی نت نتواند وارد ناحیه کاربری نفر قبل شود. خب میتوانید از کد زیر استفاده کنید:
?
۱
۲
۳
۴
۵
۶
۷
۸
۹
۱۰
۱۱
۱۲
$inactive){
session_destroy();
header(“Location: /logou.php”);
}
}
$_SESSION[“timeout”] = time();
در کد بالا در صورتی که در مدت ۶۰۰ ثانیه (۱۰ دقیقه) از طرف کاربر هیج درخواستی به سایت صورت نگیرد. در صورت ایجاد درخواست پس از این زمان به صفحه log out فرستاده میشود و از سایت خارج میشود.
ایجاد دوباره Session ID
در زمانهایی که اتفاق های مهمی از طرف کاربر می افتد مانند ورود به سایت و یا ویرایش اطلاعات شخصی بهتر است Session ID دوباره ایجاد شود تا خطر حمله به یک Session ID خاص کمتر شود. در کد زیر پس از ورود کاربر به سیستم Session ID دوباره ایجاد میشود:
?
۱
ذخیره اطلاعات در دیتابیس
در اولین زمانی که میدانید داده ها دائمی خواهند بود آن ها را در دیتابیس ذخیره کنید و از سشن بردارید. سشن فقط برای ذخیره اطلاعات گذرا استفاده میشود.