سشن در php، روش استفاده و همه نکات کاربردی (به زبان ساده)
Session یا سشن در PHP راهی برای ذخیره موقت و دسترسی به داده ها در همه صفحات وب سایت است. یک سشن یک فایل موقت ایجاد می کند که متغیرهای مختلف و مقادیر آنها را ذخیره می کند. این فایل در همه صفحات وب سایت در دسترس است تا امکان دسترسی به اطلاعات مربوط به کاربر وجود داشته داشته باشد. سشن با بسته شدن وب سایت نیز از بین می رود.
باید مسیر این فایل را با استفاده از تنظیم session.save_path در فایل php.ini مشخص کنید. اگر مسیر آن را تعیین نکنید، ممکنه سشن خراب شود.
استفاده از سشن در PHP
یک سشن در PHP این امکان را برای سرور فراهم می کند تا اطلاعات مربوط به زمان راه اندازی وب سایت، کارهای انجام شده، زمان بستن وب سایت و سایر اطلاعات مربوطه را به دست آورد. این یک مورد ضروری است زیرا برخلاف کامپیوتر یا تلفن همراه، وب سرور هیچ اطلاعاتی درباره کاربر ندارد. اینجاست که سشن ها بهکار می آیند.
سشن ها متغیرهای دارند که تمام اطلاعات لازم را در یک فایل موقت ذخیره می کنند. به طور پیشفرض با بسته شدن وب سایت این فایل نیز از بین می رود. بنابراین به بیان ساده یک سشن در PHP به ذخیره اطلاعات مرتبط به کاربران کمک می کند و امکان دسترسی به داده ها را در همه صفحات وب سایت یا برنامه فراهم می کند تا زمانی که آن را ببندید.
وقتی یک سشن را در PHP شروع می کنید چه اتفاقی می افتد؟
با شروع یک سشن موارد زیر رخ می دهد:
- یک عدد 32 رقمی هگزا دسیمال تصادفی به عنوان شناسه برای این سشن خاص ایجاد می شود. مقدار شناسه چیزی شبیه 4af5ac6val45rf2d5vre58sd648ce5f7 می باشد.
- یک کوکی به نام PHPSESSID را به سیستم کاربر ارسال می کند. کوکی PHPSESSID شناسه منحصر به فرد سشن را ذخیره می کند.
- یک فایل موقت روی سرور ایجاد شده و در یک مسیر مشخص ذخیره می شود. نام این فایل مقدار شناسه هگزادسیمال با پیشوند sess_ است. بنابراین در مثال بالا در فایلی به نام sess_4af5ac6val45rf2d5vre58sd648ce5f7 نگه داشته می شود.
PHP به کوکی PHPSESSID دسترسی پیدا کرده و شناسه منحصر به فرد را برای دسترسی به مقادیر متغیرهای سشن دریافت می کند. سپس فایل موردنظر را با آن رشته در دایرکتوری خود جستجو می کند.
وقتی مرورگر یا وب سایت بسته شود، سشن نیز پس از یک زمان معین از پیش تعیین شده منقضی می شود.
راه اندازی یک سشن در PHP
با استفاده از تابع ()session_start می توانید یک سشن را در PHP شروع و راه اندازی کنید. این تابع به طور پیشفرض ابتدا بررسی می کند که آیا سشن وجود دارد یا نه. اگر یک سشن از قبل وجود داشته باشد هیچ کاری انجام نمی دهد اما در غیر اینصورت یکی ایجاد می کند.
برای تنظیم متغیرهای سشن می توانید از آرایه سراسری
$_SESSION[]
استفاده کنید. سپس به این متغیر دسترسی پیدا کند تا زمانی که سشن از بین برود.
حالا که با سشن و نحوه شروع آن در PHP آشنا شدید، با یک مثال عملکرد آن را توضیح می دهیم.
نکته: همیشه توصیه می شود که تابع ()session_start را به عنوان اولین خط در کد خود قرار دهید، حتی قبل از تگ های HTML.
مثال
در مثال زیر یک سشن برای محاسبه تعداد دفعات بازدید از صفحه وب ابجاد می کنیم. برای این کار یک متغیر سشن به نام counter تعریف شده است.
<?php
session_start();
if( isset( $_SESSION[‘counter’] ) ) {
$_SESSION[‘counter’] += 1;
}else {
$_SESSION[‘counter’] = 1;
}
$my_Msg = “This page is visited “. $_SESSION[‘counter’];
$my_Msg .= ” time during this session.”;
?>
<html>
<head>
<title>Starting a PHP session</title>
</head>
<body>
<?php echo ( $my_Msg ); ?>
</body>
</html>
خروجی
می توانید این کد را در یک فایل مثل a.php کپی کرده و چندین بار بارگذاری کنید تا عدد متغیر counter را پس از هر بارگذاری صفحه مشاهده کنید.
دسترسی مقادیر سشن در PHP
با استفاده از متغیر سراسری $_SESSION می توانید به مقدار متغیر سشن دسترسی پیدا کنید. در مثال زیر یک متغیر سشن برای ذخیره سازی نام ایجاد شده است.
<?php
session_start();
?>
<html>
<body>
<?php
$_SESSION[“name”] = “Simplilearn”;
echo “Information set in a variable.<br/>”;
?>
</body>
</html>
خروجی
متغیر از یک فایل دیگر نیز قابل دسترسی است. یک فایل دیگر ایجاد کنید و کد زیر را برای دسترسی به متغیر وارد کنید.
نکته: باید هر دو صفحه را بدون بستن مرورگر بارگذاری کنید زیرا سشن با بستن صفحه به پایان می رسد.
<?php
session_start();
?>
<html>
<body>
<?php
echo “User is: “.$_SESSION[“name”];
?>
</body>
</html>
خروجی
از بین بردن یک سشن در PHP
گرچه به طور پیشفرض، سرور سشن را با بستن مرورگر خاتمه می دهد اما می توانید ایت کار را به صورت دستی نیز انجام دهید. دو تابع وجود دارد.
- ()session_destroy: با فراخوانی این تابع همه متغیرهای سشن حذف می شوند.
- ()unset: با فراخوانی این تابع فقط متغیر سشن مشخص شده از بین می رود.
علاوه بر این با استفاده از تابع ()session_unset می توانید همه متغیرهای یک سشن را حذف کنید.
کد زیر برای از بین بردن متغیر counter ساخته شده در مثال بالا نوشته شده است. در اینجا از تابع ()unset برای حذف متغیر سشن استفاده شده است.
<?php
unset($_SESSION[‘counter’]);
?>
فقط متغیرcounter خاتمه می یابد اما روی متغیرهای دیگر (در صورت وجود) تاثیری ندارد.
در مثال زیر از ()session_destroy برای از بین بردن یک سشن به طور کامل در PHP استفاده شده است.
<?php
session_destroy();
?>
تابع ()session_destroy هیچ پارامتر ورودی را نمی پذیرد. فقط با فراخوانی این تابع کل سشن در PHP حذف می شود.
فعال کردن سشن خودکار
لازم نیست هر بار که کاربر از وب سایت بازدید می کند، تابع ()start_session را فراخوانی کنید. در عوض می توانید سشن خودکار (Auto Session) را برای آن فعال کنید. سشن خودکار برای هر بازدید یک سشن به طور اتوماتیک ایجاد می کند.
برای فعال کردن سشن خودکار باید به فایل php.ini دسترسی پیدا کرده و متغیر session.auto_start را روی 1 تنظیم کنید.
ارسال سشن ها بدون کوکی
حتما تا به حال درخواست وب سایت ها را برای استفاده از کوکی ها دیده اید، دو گزینه دارید: پذیرفتن یا رد کردن. کاربر به سادگی می تواند استفاده و ذخیره کوکی ها را در مرورگر خود محدود کند. اما بدون استفاده از کوکی ها اسکریپت PHP چگونه شناسه یک سشن را پیدا می کند؟ یک جایگزین برای آن وجود دارد.
از SID ثابت استفاده می شود که با شروع سشن تعریف می شود. اگر کاربر اجازه استفاده از کوکی ها را بدهد، یک رشته خالی خواهد بود. اما اگر کاربر استفاده از کوکی ها را رد کند، SID فرم session_name=session_id را خواهد داشت. برای ثبت و ذخیره متغیرها می توانید از این فرم بدون قید و شرط استفاده و جاسازی کنید.
کد زیر برای ارسال شناسه سشن به مرورگر بدون کوکی نوشته شده است و نحوه استفاده از SID ثابت را برای ارسال شناسه های سشن به مرورگر نشان می دهد.
<?php
session_start();
if (isset($_SESSION[‘counter’])) {
$_SESSION[‘counter’] = 1;
}else {
$_SESSION[‘counter’]++;
}
$my_Msg = “This page was visited “. $_SESSION[‘counter’];
$my_Msg .= ” time during this session.n”;
echo ( $my_Msg );
?>
<p>
To continue click here <br />
<a href = “newpage.php?<?php echo htmlspecialchars(SID); ?>”>
</p>
خروجی
با کلیک های کاربر روی لینک، SID همراه با شناسه سشن به مرورگر ارسال می شود.
نکته: از htmlspecialchars(SID) در کد بالا برای جلوگیری از حملات XSS استفاده می شود.
نتیجه گیری
در این مقاله سشن را در PHP به طور کامل معرفی کردیم. همچنین نحوه ارسال شناسه سشن در صورت عدم استفاده کاربر از کوکی ها را بررسی کردیم. PHP به یک بخش فول استک جدایی ناپذیر در توسعه وب تبدیل شده است. بنابراین اگر می خواهید در توسعه وب حرفه ای شوید، یادگیری PHP الزامی است.
با سلام
پاسخمن با app1.php یه session ساختم و با app2.php اون session رو فراخوانی کردم و درست هم کار میکنه. ولی وقتی مرورگر رو می بندم و فایل app2,php رو فراخوانی میکنم اون session های قبلی حذف نمیشن!! لطفا راهنمایی بفرمایید.
یک تعریف اشتباه درمورد session وجود دارد که هر ۳۰دقیقه یک session است اما هر ۳۰دقیقه غیرفعال بودن کاربر در سایت یا صفحه مد نظر باعث منقضی شدن session کاربر میشود. کاربر وارد سایت شما میشود چرخی میزند از لحظه ورود به سایت اگر کلیکی برای ورود به صفحه دیگر یا هر فعالیتی رخ ندهد آن session تا ۳۰ دقیقه بعد فعال است، اگر کاربر از صفحه ما به طور کامل حتی خارج شود و قبل از اتمام ۳۰دقیقه از آخرین فعالیتش دوباره به صفحه ما مراجعه کند وارد همان session قبلی میشود ولی اگر حتی پس از گذشت ۳۱ دقیقه دوباره وارد سایت شود session جدیدی برای وی ایجاد میشود. البته session کاربر ۲۴ساعته نمیباشد حداکثر پس از ۴ساعت session منقضی میشود.
پاسخ