آموزش Session در php
شناسایی کاربرانی که در حال استفاده از سایت شما هستند و ذخیرهسازی اطلاعاتی شخصی مربوط به هر یک از آنها کاری ضروری در برنامهنویسی وب است.
برای مثال در سیستم جیمیل، در هرلحظه ممکن است صدها هزار کاربر، در حال دریافت و ارسال ایمیلهای خود از طریق رابط وب باشند. برای اینکه بتوان ایمیلهای هر فرد را بدون تداخل تنها به فرد صاحب حساب کاربری نشان داد، لازم است هر کاربر از کاربر دیگر مجزا و توسط اسکریپت تحت سرور قابل شناسایی باشند.
فناوری که در مرورگرهای وب وجود دارد و با کمک آن شناسایی هر کاربر امکانپذیر است، کوکی( Cookie ) نام دارد. کوکی اطلاعات کم حجمی است که هر سایت میتواند روی سیستم مشتری ذخیره شود. این اطلاعات به همراه هر درخواست کاربر به سرور ارسال میشود.
برای مثال ممکن است یک سایت عبارت زیر را در Cookie هر کاربر ذخیره کند:
1 2 |
userid=10 username=roka |
بدیهی است که شناسه کاربر و نام کاربری به ازای هر کاربر وارد شده به سایت متفاوت خواهد بود.
سشن(Session) چیست؟
در بخش قبل گفته شده که Cookie متغیرهای کمحجمی است که روی مرورگر کاربر ذخیره میشود. با توجه به اینکه حجم موجود برای نگهداری اطلاعات در کوکی محدود است و این اطلاعات با هر درخواست ارسالی به سرور ارسال میشود، اگر بخواهیم حجم زیادی از اطلاعات را به ازای هر کاربر نگهداری کنیم این روش کارایی لازم را نخواهد داشت.
مشکل دیگر کوکی، امنیت است. با توجه به اینکه هر کاربر به آسانی میتواند کوکیهای ذخیره شده روی سیستم خود را مشاهده کند و آنها را تغییر دهد، استفاده از کوکی برای نگهداری اطلاعات حساس مناسب نیست.
برای حل سه مشکل فوق، زبانهای برنامهنویسی تحت وب از جمله php یک روش جدید ابداع کردند تا اطلاعات پر حجم و حساس هر کاربر در سمت سرور نگهداری شود، در این روش تنها لازم است از کوکی برای تشخیص اینکه اطلاعات هر کاربر کدام است کمک گرفته شود.
به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
اطلاعات ذخیره شده در سرور شماره شناسه 10 ------------------------------- username=roka password=123456 secret_data=secret code اطلاعات ذخیره شده در مرورگر مشتری اول -------------------------------- session_id=10 اطلاعات ذخیره شده در مرورگر مشتری دوم -------------------------------- session_id=20 |
با استفاده از این روش، تنها یک شناسه در کوکیهای کاربر ذخیره میشود و اطلاعات اصلی در سمت سرور ذخیره و بازیابی میشود.
Session در php
زبان php برای مدیریت کوکی و Session دستورات مختلفی را در اختیار برنامهنویسان قرار میدهد.
استفاده از متغیر سراسری «$_SESSION» روشی آسان برای خواندن و نوشتن اطلاعات Session در php تعبیه شده است. البته استفاده از این متغیر وابسته به فراخوانی دستور «session_start» پیش از ارسال هرگونه محتوا به سمت مشتری است.
علت این محدودیت، وابستگی Session به سیستم Coockie است. با توجه به اینکه کوکیها میبایست پیش از ارسال محتوا در سرآمد پاسخ سرور گنجانده شوند، چنانچه پیش از تعریف کوکی، اطلاعاتی به مشتری فرستاده شود، تغییر دادن کوکی در این درخواست ناممکن خواهد بود.
به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php session_start(); ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ROKA</title> </head> <body> <?php if( false == isset( $_SESSION[ 'username' ] ) ) { // ask user for his/her name $_SESSION[ 'username' ] = $username; } else { echo $_SESSION[ 'username' ]; } ?> </body> </html> |
در مثال بالا ابتدا پیش از اینکه هرگونه خروجی به سمت کاربر ارسال شود، لازم است تا تابع session_start را فراخوانی کنیم. اگر این دستور فراخوانی نشود یا پس از ارسال خروجی به سمت کاربر فراخوانی شود، اطلاعات نمیتواند بین درخواستهای مختلف پابرجا بماند. علت این است که شناسایی کاربران مختلف برای سشن از طریق کوکیها انجام میشود و کوکیها تنها قبل از ارسال اطلاعات صفحه در سرآمد پاسخ( Response Header ) میتوانند به کاربر ارسال شوند.
حذف کامل Session در php
به دلایلی ممکن است بخواهید اطلاعات مربوط به سشن فعال کاربر را به طور کامل حذف کنید. برای انجام این کار مقدار آرایهی SESSION را مساوی یک آرایهی خالی قرار میدهیم:
1 |
$_SESSION = array(); |
همچنین ممکن است بخواهید یک متغیر خاص را در سشن حذف کنید:
1 |
unset( $_SESSION[ 'username' ] ); |
بهینهسازی سشن در سایتهای بزرگ
عملکرد Session در php بر اساس ذخیرهسازی اطلاعات در فایل است. به ازای هر سشن که ایجاد میکنید یک فایل روی دیسک سخت ساخته میشود. این کار علاوه بر اینکه میتواند مشکلات امنیتی به ویژه در هاستهای اشتراکی به دنبال داشته باشد، برای سایتهایی با کاربران زیاد قابل استفاده نیست. در عوض میتوان عملکرد ذخیره و بازیابی Session را از حالت پیشفرض خارج کرد و ذخیره و بازیابی این اطلاعات را برای مثال روی پایگاه داده به انجام رساند. برای کنترل ذخیرهسازی سشن میبایست از تابع session_set_save_handler استفاده کنیم.
مستندات سشن در php
دستورات php برای مدیریت Session دارای گستردگی و امکانات بیشتری هستند. برای کسب اطلاعات بیشتر اینجا کلیک کنید.