محافظت از شناسه جلسه در PHP. جلسات

جلسات در PHP یا به عنوان داده های مربوط به کاربر یا مشتری که از یک سایت بازدید می کند، هنگام جابجایی بین صفحات یک سایت بدون مشکل ذخیره می شود. درس خیلی مهمه مربوط به ایجاد 95٪ از وب سایت ها.

جلسه در php چیست؟

جلسات برای ذخیره داده های موقت (مثلاً اینکه کاربر از یک سایت بازدید کرده است) هنگام پیمایش بین صفحات همان سایت استفاده می شود. هنگام استفاده از جلسات، داده ها در فایل های موقت روی سرور ذخیره می شوند.
اغلب، جلسات (و کوکی ها نیز) هنگام ایجاد فروشگاه های آنلاین، انجمن ها، تابلوهای پیام، شبکه های اجتماعی، وبلاگ ها و منابع دیگر. راحتی سیستم جلسه ذخیره سازی اطلاعات موقت کاربر/مشتری بازدیدکننده است که داده های آن در دسترسی سریع زمان معین. جلسه دارای تاریخ انقضای طبیعی است - تا زمانی که مرورگر بسته شود. اگر فقط صفحه را ببندید، پس از باز کردن سایت، اطلاعات مربوط به کاربر/مشتری همچنان در دسترس خواهد بود.

منطق جلسه

Session (یا session) نوعی ذخیره سازی موقت داده است. من فوراً به شما هشدار می دهم که صرفه جویی در مقدار کمی داده ارزش آن را دارد. به عنوان مثال، لاگین و رمز عبور کاربر بازدیدکننده یا شماره سریال او در پایگاه داده.

نمونه کار
1. کاربر لاگین و رمز عبور خود را وارد کرده و وارد سایت می شود
2. داده ها با ورود و رمز عبور در جلسه یکی از صفحات سایت ذخیره می شوند:

فایل index.php

Session_start(); // هر فایلی که می‌خواهید در آن از داده‌های جلسه استفاده کنید، باید حاوی دستور "شروع جلسه" در ابتدای کد باشد

$login = "admin";
$password = "گذر";
$_SESSION["login"] = $login; // یک متغیر حاوی لاگین ذخیره کنید
$_SESSION["password"] = $password; // یک متغیر حاوی رمز عبور ذخیره کنید

3. وقتی به صفحه دیگری از سایت می روید، این داده ها نیز در دسترس خواهند بود:

فایل example.php(یا هر صفحه دیگری)

Echo "ورود شما ".$_SESSION["login"]; // "ورود شما مدیر است" را نمایش می دهد، اگرچه ما هیچ داده ای را در این صفحه ثبت نکردیم!
ببینید، ساده است!

4. اگر می‌خواهید داده‌های جلسه را پاک کنید، فقط:

فایل example.php

Session_start(); // "شروع جلسه" دوباره

Unset($_SESSION["login"]); // به این ترتیب متغیر ثبت نشده یا "نابود شد"
echo "ورود شما ".$_SESSION["login"]; // "ورود شما" را نمایش می دهد. از آنجایی که ما آن را در آخرین خط نابود کردیم، هیچ داده ای وجود ندارد

Session_Destroy(); // جلسه را از بین ببرید. همه داده‌ها، از جمله $_SESSION["رمز عبور"] دیگر وجود ندارد. هنگام درخواست آنها، یک خطا نمایش داده می شود
به طور کلی، چنین انتقالی شبیه به روش POST است، اما دیگر نیازی به نوشتن کدهای غیر ضروری زیادی نیست و تمام داده های منتقل شده از صفحه به صفحه در فایل های موقت روی سرور ذخیره می شود. تکرار می کنم، جلسات باید حاوی مقادیر کمی از داده ها باشد، بنابراین برای ذخیره ورود / رمز عبور، سبد خرید و سایر حجم های کوچک مناسب هستند.

ارسال یک مقدار یا آرایه با استفاده از یک جلسه PHP

شما می توانید نه تنها یک رشته، بلکه آرایه ای از داده ها را در یک جلسه بنویسید. فقط با حجم آرایه زیاده روی نکنید، زیرا همه اینها بر سرعت و فضای اشغال شده روی سرور تأثیر می گذارد.

بیایید دوباره از مقداری استفاده کنیم صفحه اصلی index.php

Session_start();

$r = آرایه ("یک"، "دو"، "سه");

$_SESSION["arr"] = $r;

به صفحه ای که همه چیز در آن نمایش داده می شود
ما داده ها را در جلسه ذخیره کردیم و پیوند را به صفحه دیگری دنبال می کنیم، جایی که همه داده ها را نمایش می دهیم.

فایل مقصد، صفحه test.phpجایی که آرایه را باز می کنیم

Session_start();
print_r($_SESSION["arr"]);
// چاپ خواهد شد
/*
آرایه
=> یک
=> دو
=> سه
*/
?>
ممکن است بخواهید در مورد درس در . به طور کلی، همه چیز باید روشن باشد.

توابع دیگر برای کار با جلسات

session_unregister (رشته)- جلسه مقدار متغیر جهانی مشخص شده را فراموش می کند.
session_destroy()- جلسه از بین می رود (به عنوان مثال، اگر کاربر با کلیک بر روی دکمه خروج از سیستم خارج شود).
session_set_cookie_params (طول عمر int [، مسیر رشته [، دامنه رشته]])- با استفاده از این تابع می توانید با تنظیم unix_timestamp که زمان مرگ جلسه را تعیین می کند، تعیین کنید که یک جلسه چقدر زنده بماند.

لیست توابع کار با جلسات در php
session_cache_expire - انقضای کش فعلی را برمی گرداند
session_cache_limiter - محدود کننده کش فعلی را دریافت و/یا تنظیم می کند
session_commit یک نام مستعار برای session_write_close() است.
session_decode - داده های جلسه را از یک رشته رمزگشایی می کند
session_destroy - تمام داده های ثبت شده برای جلسه را از بین می برد
session_encode - داده های جلسه جاری را به عنوان یک رشته رمزگذاری می کند
session_get_cookie_params - پارامترهای کوکی جلسه را دریافت می کند
session_id - شناسه جلسه فعلی را می گیرد و/یا تنظیم می کند
session_is_registered - تعیین می کند که آیا متغیر در جلسه ثبت شده است یا خیر
session_module_name - ماژول جلسه فعلی را دریافت و/یا تنظیم می کند
session_name - نام جلسه فعلی را می گیرد و/یا تنظیم می کند
session_regenerate_id - شناسه جلسه فعلی را با یک شناسه تازه ایجاد شده تغییر می دهد
session_register - یک یا چند متغیر را برای جلسه جاری ثبت می کند
session_save_path - مسیر ذخیره جلسه جاری را دریافت و/یا تنظیم می کند
session_set_cookie_params - پارامترهای کوکی جلسه را تنظیم می کند
session_set_save_handler - عملکردهای ذخیره سازی جلسه در سطح کاربر را تنظیم می کند
session_start - داده های جلسه را مقدار دهی اولیه می کند
session_unregister - یک متغیر را از جلسه فعلی لغو ثبت می کند
session_unset - همه متغیرهای جلسه را آزاد می کند
session_write_close - داده های جلسه و پایان جلسه را می نویسد

نمونه کارهای جلسه

شمارش تعداد بازدید از صفحه در طول یک جلسه. نمونه بارز کار. با این حال، پس از بستن مرورگر، شمارش معکوس دوباره شروع می شود.

تعداد بازدید از یک صفحه در یک جلسه

// یک مثال ساده از استفاده از جلسات بدون کوکی.
session_name("test");
session_start();
$_SESSION["count"] = @$_SESSION["count"] + 1;
?>

شمارنده


شما این صفحه را در جلسه فعلی مرورگر خود باز کرده اید
زمان(ها)
برای بازنشانی این شمارنده، مرورگر خود را ببندید.
برای به روز رسانی صفحه اینجا را کلیک کنید!
با هر انتقال شمارنده 1 افزایش می یابد)

با تشکر از توجه شما! در تلاش های خود موفق باشید!

از همان ابتدا، همه با صدای بلند PHP را پذیرفتند، اما به محض اینکه پروژه های نسبتاً بزرگی به این زبان شروع شد، توسعه دهندگان با مشکل جدیدی روبرو شدند - PHP فاقد مفهوم متغیرهای جهانی بود! یعنی یک اسکریپت خاص اجرا شد، صفحه تولید شده برای کلاینت ارسال شد و تمام منابع استفاده شده توسط این اسکریپت از بین رفت. سعی می کنم نشان دهم: فرض کنید دو صفحه از یک سایت وجود دارد، index.php و dothings.php. منابع این صفحات به این صورت است:

index.php dothings.php

اگر این دو اسکریپت را اجرا کنیم، در صفحه اول کتیبه "I was assigned to index.php" را می بینیم و صفحه دوم خالی خواهد بود.

توسعه دهندگان وب سایت، بدون دوبار فکر کردن، شروع به استفاده از کوکی ها برای ذخیره متغیرهای سراسری در سمت مشتری کردند. این روند چیزی شبیه به این بود: کاربر به صفحه اصلی سایت می آید، برخی از اقدامات را انجام می دهد و تمام اطلاعات مرتبط با این کاربر که ممکن است در صفحات دیگر سایت مورد نیاز باشد، در مرورگر او به شکل ذخیره می شود. از کوکی ها این روش دارای معایب کاملاً جدی است ، به همین دلیل بسیاری از توسعه دهندگان در یک زمان از PHP دور شدند. به عنوان مثال، ما باید به کاربر اجازه دسترسی به بخش های خصوصی (یا خصوصی) سایت را بدهیم. شما باید یک کوکی برای کاربر ارسال کنید که به عنوان شناسه بعدی او در سایت عمل می کند. به محض اینکه سایت شروع به جمع آوری اطلاعات بیشتر و بیشتر در مورد رفتار کاربر می کند، این رویکرد بسیار دست و پا گیر و ناخوشایند می شود، زیرا توصیه می شود تمام اطلاعات ارسال شده به کاربر را رمزگذاری کنید تا نتوان آنها را جعلی کرد. اخیراً، با جعل کوکی‌ها، می‌توان بیش از یک چت را "شک کرد" و حتی گاهی اوقات به ایمیل شخص دیگری وارد شد. علاوه بر این، هنوز افراد عجیبی در دنیا وجود دارند که مرورگرشان از کوکی ها پشتیبانی نمی کند.

من به مسائل فنی مکانیسم جلسه نمی پردازم، بلکه فقط نحوه صحیح کار با جلسات در PHP را شرح خواهم داد.

چگونه با جلسات کار کنیم؟

اگر نمونه‌های مقاله (یا اسکریپت‌های خود) را روی هر میزبانی تجاری آزمایش کنید، نباید مشکلی در کار با جلسات وجود داشته باشد. اگر سرور خود را خودتان راه‌اندازی کنید (خواه سرور واقعی باشد یا شبیه‌ساز)، ممکن است خطاهایی مانند این ظاهر شود:

"هشدار: open(/var/state/php/sess_6f71d1dbb52fa88481e752af7f384db0، O_RDWR) ناموفق بود: چنین فایل یا دایرکتوری وجود ندارد (2)."

این فقط به این معنی است که PHP شما به درستی پیکربندی نشده است. شما می توانید با تعیین مسیر صحیح (به دایرکتوری موجود) برای ذخیره جلسات در فایل php.ini و راه اندازی مجدد سرور، این مشکل را حل کنید.

هر اسکریپتی که از متغیرها (داده ها) از جلسات استفاده می کند باید دارای خط زیر باشد:

Session_start();

این دستور به سرور می گوید که یک صفحه معین به تمام متغیرهایی نیاز دارد که با یک کاربر خاص (مرورگر) مرتبط هستند. سرور این متغیرها را از فایل گرفته و در دسترس قرار می دهد. بسیار مهم است که یک جلسه قبل از ارسال هر گونه داده به کاربر باز شود. در عمل، این بدان معنی است که توصیه می شود تابع session_start() را در همان ابتدای صفحه فراخوانی کنید، به عنوان مثال مانند این:

Session_start(); ?> ... برای تنظیم دایرکتوری که فایل های جلسه در آن ذخیره می شوند، از تابع session_save_path() استفاده کنید: session_save_path($_SERVER["DOCUMENT_ROOT"]."/session"); session_start();

پس از شروع جلسه، می توانید متغیرهای سراسری را تنظیم کنید.

index.php هنگام اختصاص دادن هر مقداری به هر فیلدی از آرایه $_SESSION، متغیری با همان نام به طور خودکار به عنوان متغیر جلسه ثبت می شود.

dothings.php

این آرایه در تمام صفحات با استفاده از جلسه موجود است. به عنوان مثال، بیایید به برنامه نگاه کنیم:

همه چیز اوکی است. جلسه بارگیری شد!

بیایید مرور کنیم و ببینیم چه چیزی وجود دارد:

هنگام اجرای متوالی این فایل ها، اولین اسکریپت "index.php" نتیجه زیر را ایجاد می کند:

همه چیز اوکی است. جلسه بارگیری شد! بیایید مرور کنیم و ببینیم چه چیزی وجود دارد:

و دومین "dothings.php" این است:

  • از من خواسته شد تا index.phpمتغیر $a اکنون در تمام صفحات یک سایت مشخص که جلسات راه اندازی کرده اند در دسترس است.
  • سایر ویژگی ها و تکنیک های مفید برای کار با جلسات:تنظیم نشده ($_SESSION["a"])
  • - جلسه مقدار متغیر session مشخص شده را فراموش می کند. session_destroy()
  • - جلسه از بین می رود (به عنوان مثال، اگر کاربر با کلیک بر روی دکمه "خروج" سیستم را ترک کند). session_set_cookie_params (طول عمر int [، مسیر رشته [، دامنه رشته]])

- با استفاده از این تابع می توانید با تنظیم unix_timestamp که زمان "مرگ" جلسه را تعیین می کند، تعیین کنید که جلسه چقدر زنده بماند. به طور پیش فرض، جلسه "زنده" است تا زمانی که مشتری پنجره مرورگر را ببندد.

session_write_close() - ضبط متغیرهای جلسه و بستن آن.این برای باز کردن سایت در یک پنجره جدید ضروری است اگر صفحه زمان زیادی برای پردازش طول می کشد و فایل جلسات را برای مرورگر شما مسدود کرده است.

نمونه ها

حالا بیایید به آن بپردازیم

کاربرد عملی

مکانیسم جلسه در اینجا ما به چند نمونه نسبتا ساده و در عین حال مفید نگاه خواهیم کرد. index.php مجوز کاربر

سوالاتی در مورد مجوز کاربر با استفاده از جلسات PHP به طور مداوم در کنفرانس های برنامه نویسی وب پرسیده می شود. مکانیسم مجوز دادن به کاربران در سیستم با استفاده از جلسات از نقطه نظر امنیتی بسیار خوب است (به بخش مراجعه کنید).
مثال ما از سه فایل تشکیل شده است: index.php، authorize.php و secretplace.php. فایل index.php حاوی فرمی است که کاربر نام کاربری و رمز عبور خود را در آن وارد می کند. این فرم داده ها را به فایل authorize.php ارسال می کند که در صورت موفقیت آمیز بودن مجوز، امکان دسترسی کاربر به فایل secretplace.php و در غیر این صورت پیغام خطا نمایش داده می شود.


مثال ها: page... header("Location: secretplace.php"); خروج؛

) ) // اگر چیزی اشتباه بود، کاربر // یک پیام خطا دریافت می کند. ?>رمز عبور را اشتباه وارد کردید! secretplace.php!!! :)

ایمنی

سلام ، شما در حالصفحه مخفی

پروتکل SSL

، اما همه از آن استفاده نمی کنند.

  • یکی از همسایگان به رایانه کاربر ما نزدیک شد و شماره جلسه را دزدید.
  • چنین شرایطی، بر اساس این واقعیت که شخصی چیزی را از شخص دیگری سرقت می کند، به طور کلی در صلاحیت برنامه نویس نیست. خود مدیران و کاربران باید مراقب این موضوع باشند.
    با این حال، PHP اغلب می تواند "فریب خورده" شود. بیایید به نقاط هک احتمالی در برنامه مجوز کاربر نگاه کنیم: فایل autorize.php تلاشی برای حدس زدن رمز عبور با استفاده از یک اسکریپت شخص ثالث است."

فایل secretplace.php تلاشی برای فریب برنامه با وارد کردن مقادیر متغیر $logged_user در نوار آدرس مرورگر است، به عنوان مثال مانند این:

"http://www.yoursite.ru/secretplace.php؟

loged_user=هکر

بنابراین، دو "حفره" به وضوح در برنامه ما قابل مشاهده است، یکی کوچک است و به طور خاص قابل توجه نیست، اما دومی به سادگی بزرگ است، که از طریق آن بیشتر هکرها وارد جایی می شوند که نیازی به رفتن ندارند. چگونه سوراخ شماره 1 را "پچ" کنیم؟ خروج؛


ما هزاران کد برای مسدود کردن یک آدرس IP و غیره نمی نویسیم، بلکه فقط بررسی کنید که درخواست از کجا آمده است، یا بهتر است بگوییم درخواست از چه صفحه ای آمده است، اگر صفحه ای از سایت ما باشد، پس همه چیز خوب است، اما در همه موارد دیگر ما به شما اجازه ورود نمی دهیم. بیایید فایل authorize.php را تنظیم کنیم:

فرض کنید یک وب سایت دارید که در آن همه می توانند برای ارسال در یک انجمن ثبت نام کنند. به طور طبیعی، در انجمن، برخی از کاربران (مدیران، مدیران) فرصت های بیشتری نسبت به دیگران دارند، به عنوان مثال، می توانند پیام های سایر کاربران را حذف کنند. سطح دسترسی کاربر را در جلسه، در متغیر $user_status ذخیره می‌کنید، جایی که $user_status = 10 مربوط به دسترسی کامل به سیستم است. مهاجمی که به سایت می آید فقط باید به روش عادی ثبت نام کند و سپس در نوار آدرس مرورگر اضافه کند?user_status=10

. بنابراین شما یک مدیر جدید در انجمن خود دارید!در اصل، هر متغیر اسکریپت را می توان از طریق تنظیم کرد نوار آدرس، فقط بعد از اضافه کردن

آدرس کامل روی اسکریپت یک علامت سوال و نام متغیر با مقدار آن وجود دارد. بیایید کد خود را برای جلوگیری از این مشکل اصلاح کنیم: ?>Secretplace.php V2

متغیر unset($_SESSION["logged_user"]);

// جلسه session_start(); /* شما نمی توانید فقط به این صفحه بروید... اگر نام کاربری ثبت نشده باشد، او را به صفحه index.php هدایت می کنیم تا لاگین و رمز عبور را وارد کند... در اینجا واقعاً می توانید کارهای زیادی انجام دهید. به عنوان مثال، IP کاربر را به خاطر بسپارید و پس از تلاش سوم برای دسترسی به فایل ها، آن را مسدود کنید.*/ if(!isset($_SESSION["logged_user"]))( header("Location: index.php"); exit; ) ?>

- با استفاده از این تابع می توانید با تنظیم unix_timestamp که زمان "مرگ" جلسه را تعیین می کند، تعیین کنید که جلسه چقدر زنده بماند. به طور پیش فرض، جلسه "زنده" است تا زمانی که مشتری پنجره مرورگر را ببندد.

، شما در یک صفحه مخفی هستید!نتایج
?>
مکانیسم جلسه یک ویژگی بسیار خوب زبان PHP است. جلسات ساده و برای استفاده بسیار انعطاف پذیر هستند. به هر حال، یک احتمال وجود دارد، کمی مستند جلسات PHP
(از نسخه 4.0.3 موجود است) - جلسات می توانند نه تنها متغیرها، بلکه اشیاء را نیز ذخیره کنند.



درج خودکار

شمارنده

SID در فرم. ini_set("session.use_trans_sid"، true); session_start(); ?>
// SID به صورت خودکار در لینک ها درج شود. ini_set("session.use_trans_sid"، true); session_start(); ?>
اینجا را کلیک کنید!
اینجا را کلیک کنید!!

شمارنده

// نمونه ای از کار با جلسات. session_start(); // اگر به تازگی از سایت بازدید کرده اید، شمارنده را بازنشانی کنید. if (!isset($_SESSION["count"])) $_SESSION["count"] = 0; // شمارنده را در جلسه افزایش دهید. $_SESSION["count"] = $_SESSION["count"] + 1; ?>زمان(ها)
برای بازنشانی این شمارنده، مرورگر خود را ببندید.
?زمان(ها)

مرورگر خود را ببندید تا شمارنده تنظیم مجدد شود.

با استفاده از یک جلسه PHP، سرور شما را شناسایی می کند و به شما اجازه می دهد تا عملیات لازم را انجام دهید: تغییر اطلاعات در صفحات مختلف وب، افزودن اطلاعات جدید و غیره. پس از اتمام کار در سایت، با کلیک بر روی دکمه "خروج" جلسه فعلی را حذف می کنید:

جلسه PHP چیست؟

جلسه PHP روشی برای ذخیره اطلاعات در متغیرهای جلسه است که می تواند برای احراز هویت در چندین صفحه وب استفاده شود. برخلاف کوکی ها، اطلاعات جلسه در رایانه کاربر ذخیره نمی شود. در عوض، جلسه یک فایل در سرور در یک فهرست موقت ایجاد می کند.

این اطلاعات که در طول جلسه ذخیره می شود، برای تمام صفحات وب منبع موجود است. در سرور، محل فایل موقت با پارامتر session.save_path در فایل پیکربندی php.ini تعیین می شود.

هنگام ایجاد یک جلسه PHP، سه مرحله زیر انجام می شود:

  • هنگامی که یک جلسه ایجاد می شود، PHP یک شناسه منحصر به فرد تولید می کند که یک رشته تصادفی از 32 عدد هگزا دسیمال است. شناسه طول عمر جلسه PHP چیزی شبیه به این است: 9c8foj87c3jj973actop1re472e8774;
  • سرور یک کوکی به نام PHPSESSID را به کامپیوتر کاربر ارسال می کند تا یک رشته شناسه جلسه منحصر به فرد را ذخیره کند.
  • سرور یک فایل در پوشه موقت مشخص شده ایجاد می کند که حاوی نام شناسه جلسه منحصر به فرد با پیشوند است. session_g. sess_9c8foj87c3jj973actop1re472e8774.

این تنظیمات به اسکریپت PHP کمک می کند تا مقادیر متغیر session را از فایل بازیابی کند. در سمت مشتری، PHPSESSID حاوی شناسه جلسه است. نام فایلی را که باید در دایرکتوری خاصی در سمت سرور جستجو شود، تایید می‌کند که می‌توان متغیرهای جلسه را از آن استخراج کرد و برای تایید استفاده کرد.

کاربر می تواند جلسه را با کلیک بر روی دکمه خروج، که تابع session_destroy() را فراخوانی می کند، پایان دهد. هنگامی که کاربر مرورگر را می بندد، جلسه PHP به طور خودکار بسته می شود. در غیر این صورت سرور پس از مدت زمان مشخص شده جلسه را خاتمه می دهد.

نحو جلسه در PHP

هنگامی که PHP از طریق یک جلسه مجوز می دهد، با استفاده از تابع ()sesion_start ایجاد می شود و با استفاده از تابع session_destroy() حذف می شود. یک متغیر جهانی PHP به نام _SESSION $ برای تنظیم مقادیر متغیرهای جلسه استفاده می شود. با استفاده از تابع session_unset () می توانید تمام مقادیر تنظیم شده برای متغیرهای جلسه را بازنشانی کنید.

عملیات جلسه

ما به عملیات زیر با استفاده از یک جلسه PHP و همچنین نمونه هایی از آنها نگاه خواهیم کرد.

  • شروع یک جلسه PHP و تنظیم متغیرهای جلسه آن:یک جلسه جدید PHP با استفاده از تابع session_start() شروع می شود. هنگامی که یک جلسه ایجاد شد، متغیرهای جلسه آن را می توان با استفاده از $_SESSION تنظیم کرد. ما مقادیر را برای متغیرها تنظیم کرده ایم. شناسه کاربر” — “php_user"و" رمز عبور” — “آموزش ها”:

جلسات PHP - ایجاد یک جلسه PHP شروع شده است و متغیرهای جلسه تنظیم شده اند!"؛ ?>

نتیجه: اجرای کد PHP بالا روی سرور پیام زیر را ایجاد می کند:

  • دریافت مقادیر متغیر جلسه PHP: دریافت مقادیر متغیرهایی که در آخرین جلسه ورود به PHP تنظیم کرده ایم امکان پذیر است. وقتی یک جلسه PHP را در ابتدای هر صفحه باز می کنیم ( session_start()، کد زیر باید مشخص شود. ما این مقادیر را با استفاده از متغیر جهانی $_SESSION بازیابی و نمایش می دهیم:

جلسه PHP - گرفتن مقادیر
"; echo "Password - " . $_SESSION["password"] . "."; ?>

نتیجه: وقتی کد PHP بالا را روی سرور اجرا می کنیم، پیام زیر را دریافت می کنیم. مقادیر متغیرهای session که قبل از ایجاد جلسه PHP تنظیم کرده بودیم نمایش داده می شود.

  • به روز رسانی مقادیر متغیر جلسه PHP: در طول یک جلسه، می توانید مقادیر متغیرهای آن را به روز کنید. ابتدا باید یک جلسه PHP در ابتدای هر صفحه باز کنیم ( session_start()). در کد زیر، مقادیر متغیرها را به روز می کنیم. شناسه کاربر” — “new_php_user"و" رمز عبور” — “آموزش و پرورش”.

می توانید آرایه ای از متغیرهای جلسه و مقادیر آنها را با استفاده از تابع print_r($ _SESSION) چاپ کنید، همانطور که در زیر نشان داده شده است:

جلسه PHP - تغییر مقادیر
"; print_r($_SESSION); ?>

نتیجه: وقتی کد PHP بالا را روی سرور اجرا می کنیم، پیام زیر را دریافت می کنیم. این شامل آرایه ای از متغیرهای جلسه با مقادیر جدید آنها خواهد بود.

جلساتبه شما امکان می دهد با استفاده از بازدید کننده و سایت ارتباط برقرار کنید شناسه جلسه.

متغیرهای Session و مقادیر آنها فقط در سرور ذخیره می شوند. فقط شناسه جلسه (به طور تصادفی تولید شده) در رایانه کاربر و سرور ذخیره می شود که به ما امکان می دهد بین کاربر و سرور ارتباط برقرار کنیم.

شناسه جلسه ذخیره شده در رایانه کاربر یک کوکی است.

کوکی در مرورگر کاربر ذخیره می شود و فایل مربوطه نیز در سرور ایجاد می شود.

یک جلسه ایجاد کنید

ساده ترین راه برای باز کردن یک جلسه استفاده از تابع session_start است:

// شروع جلسه session_start();

این تابع بررسی می‌کند که آیا یک شناسه جلسه وجود دارد یا نه، یکی را ایجاد می‌کند. اگر شناسه جلسه فعلی از قبل وجود داشته باشد، متغیرهای جلسه ثبت شده بارگیری می شوند.

این ساختار (برای هر صفحه باید یک بار فراخوانی شود) باید فراخوانی شود قبل از هر نتیجه گیری(این قانون برای setcookie()) از جمله فاصله ها نیز کار می کند.

هنگامی که یک جلسه ایجاد می شود، کوکی زیر به مرورگر ارسال می شود:

PHP

echo "نام جلسه: ".session_name(). " شناسه جلسه: ".session_id(); // نام جلسه: PHPSESSID شناسه جلسه: mceu820l02id3ds0vcvtgnht04

یک متغیر جلسه ایجاد کنید

یک متغیر جلسه با افزودن یک مقدار به آرایه ابرجهانی $_SESSION ایجاد می شود:

$_SESSION["nick"] = $_POST["نام"];

از بین بردن متغیرهای جلسه و خود جلسه

1. شما می توانید یک متغیر session را به صورت زیر حذف کنید:

Unset($_SESSION["لقب"]);

این کار از استفاده مجدد از اطلاعات جلوگیری می کند.

اما بهتر است فقط آرایه $_SESSION را پاک کنید (همه متغیرهای جلسه را حذف کنید):

//آرایه را پاک کنید $_SESSION $_SESSION = array();

2. همچنین باید موارد زیر را انجام دهید:

تنظیم کوکی جلسه نامعتبر است:

اگر (isset($_COOKIE)) ( // session_name() - نام مجموعه کوکی جلسه فعلی را دریافت کنید(session_name()، ""، time()-86400، "/"); )

نام جلسه به شناسه جلسه در کوکی ها و URL اشاره دارد

3. از بین بردن (پایان) جلسه

Session_Destroy();

بافر خروجی

اگر از قبل مقداری خروجی دارید، می توانید از تابع ()ob_start استفاده کنید. این تابع خروجی را بافر می کند. اکنون خروجی به مرورگر ارسال نمی شود مگر اینکه با استفاده از تابع ()ob_end_flush آن را مجبور کنید.

"؛ unset($_SESSION["nick"]); if (isset($_COOKIE)) (setcookie(session_name()، ""، time()-86400، "/"); // محتویات جلسه - رشته خالی) // setcookie بدون خطا کار می کند، زیرا ما هم اکنون ob_end_flush( // خروجی را به session_destroy();

از طرف دیگر، همیشه لازم نیست از تابع ()ob_end_flush استفاده شود، زیرا مفسر PHP به طور خودکار بافر را هنگام اجرای اسکریپت پاک می کند.

ایجاد مجدد شناسه جلسه

برای اهداف امنیتی، هر بار که وارد سیستم می شوید، باید شناسه جلسه را دوباره ایجاد کنید. اطلاعات در متغیرهای جلسه حفظ می شود، فقط شناسه جلسه تغییر می کند. فراموش نکنید، اطلاعات جلسه در وب سرور به صورت متن در یک فایل مربوطه ذخیره می شود. برای ایجاد مجدد شناسه، session_regenerate_id() را فراخوانی کنید و صفحه فعلی را بازخوانی کنید یا کاربر را به صفحه دیگری هدایت کنید.

مکانیسم جلسه


کاهش طول عمر جلسه

به طور پیش فرض، طول عمر جلسه 0 است، به این معنی که وقتی کاربر پنجره مرورگر را می بندد، جلسه از بین می رود. گاهی اوقات لازم است جلسه کاربر به دلیل عدم فعالیت وی پایان یابد. این را می‌توان به روش زیر پیاده‌سازی کرد (به مثال مجوز نگاه می‌کنیم): یک متغیر ایجاد می‌کنیم و زمان مجوز کاربر را در آن ذخیره می‌کنیم، اگر سعی کنیم صفحه را به‌روزرسانی کنیم، زمان را با زمان عدم فعالیت مقایسه می‌کنیم. اگر از آن فراتر رفت، کاربر را از سیستم خارج می کنیم و کاربر را به صفحه مجوز هدایت می کنیم.

$_SESSION["شروع"] = زمان(); // مهر زمانی مجوز کاربر $now = time(); // زمان فعلی $time_limit = 1000; // حداکثر زمان مجاز عدم فعالیت کاربر بر حسب ثانیه. if ($now > $_SESSION["start"] + $time_limit) ( تکرار "زمان شما به پایان رسیده است"؛ //...... // و جلسه و کوکی آن را حذف کنید) other ($_SESSION["start " ] = time(); ) // در صورت سفارش، به روز رسانی

چگونه یک عمر جلسه را ابدی کنیم؟

برای اینکه کلاینت همیشه وارد سیستم شود، نیازی به تنظیم طول عمر جلسه برای ابدی بودن نیست. جلسه یک جلسه است: با ورود مشتری شروع می شود و با خروج مشتری به پایان می رسد.

هنگامی که مشتری دوباره می آید، باید یک جلسه جدید را شروع کنید، اما داده های مربوط به مشتری را بر اساس یک کوکی منحصر به فرد برای مشتری، در آن بارگیری کنید، که به طور دائم برای او نصب می شود، زمانی که چک باکس را انتخاب می کند، به عنوان مثال، "مرا به خاطر بسپار ".

کار با یک جلسه زمانی که کوکی ها غیرفعال هستند

اگر تنظیمات session.use_trans_sid روی 1 تنظیم شده باشد، پس از غیرفعال شدن کوکی ها، PHP PHPSESSID را با استفاده از روش GET در خط درخواست ارسال می کند.

وب سرور ارتباط دائمی با مشتری برقرار نمی کند و هر درخواست به عنوان یک درخواست جدید بدون هیچ ارتباطی با درخواست های قبلی پردازش می شود.
یعنی نه می‌توانید درخواست‌های یک بازدیدکننده را ردیابی کنید و نه می‌توانید متغیرها را بین بازدید از صفحات جداگانه برای او ذخیره کنید. برای حل این دو مشکل بود که جلسات اختراع شد.
در واقع، جلسات، به طور خلاصه، مکانیزمی است که به شما امکان می دهد یک مرورگر را به طور منحصر به فرد شناسایی کنید و یک فایل برای این مرورگر در سرور ایجاد کنید که متغیرهای جلسه در آن ذخیره می شوند.

من نیاز به چنین مکانیزمی را با جزئیات شرح نمی دهم. اینها موارد کتاب درسی مانند سبد خرید در فروشگاه الکترونیکی، مجوز، و همچنین مشکلات کاملاً بی اهمیت نیستند، مانند محافظت از بخش های تعاملی یک سایت در برابر هرزنامه.

در اصل، ساختن آنالوگ جلسات خود، نه به عملکردی که در PHP تعبیه شده است، اما در اصل مشابه است، بسیار آسان است. روی کوکی ها و پایگاه داده
هنگام درخواست اسکریپت، به دنبال این هستیم که ببینیم آیا کوکی با نام خاصی دریافت شده است یا خیر. اگر کوکی وجود ندارد، آن را تنظیم کنید و یک خط جدید با اطلاعات کاربر در پایگاه داده بنویسید. اگر کوکی وجود داشته باشد، داده ها را از پایگاه داده می خوانیم. با یک درخواست دیگر، رکوردهای قدیمی را از پایگاه داده حذف می کنیم و اکنون مکانیزم جلسه را آماده کرده ایم. اصلا سخت نیست. اما برخی نکات ظریف وجود دارد که استفاده از مکانیسم نشست داخلی را ترجیح می دهد.

اگر فقط اولین مورد فعال باشد، در شروع جلسه (هر تماس session_start()) یک کوکی برای مشتری تنظیم شده است. مرورگر با هر درخواست بعدی به درستی این کوکی را برمی گرداند و PHP یک شناسه جلسه دارد. اگر مرورگر کوکی ها را برنگرداند، مشکلات شروع می شود. در این حالت، بدون دریافت کوکی با شناسه، PHP همیشه یک جلسه جدید را شروع می کند و مکانیسم کار نمی کند.

اگر فقط مورد دوم فعال باشد، کوکی تنظیم نشده است. و این چیزی است که اتفاق می افتد، به خاطر آن، در واقع، ارزش استفاده از مکانیسم جلسه داخلی را دارد. پس از اینکه اسکریپت کار خود را انجام داد و صفحه به طور کامل شکل گرفت، PHP کل صفحه را اسکن می کند و یک شناسه جلسه به هر لینک و به هر فرم اضافه می کند. چیزی شبیه این به نظر می رسد:
شاخصتبدیل می شود
شاخص
و یک فیلد مخفی به فرم ها اضافه می شود

و مرورگر، وقتی روی هر پیوندی کلیک می‌کنید، یا وقتی روی دکمه‌ای در فرم کلیک می‌کنید، متغیر مورد نیاز ما - شناسه جلسه - را در درخواست ارسال می‌کند!
به دلایل واضح، شناسه فقط به پیوندهای نسبی اضافه می شود.

از نظر تئوری، در جلسات خانگی خود در مورد کوکی ها و پایگاه داده، می توانیم به صورت دستی انتقال شناسه را به همه پیوندها اختصاص دهیم - و سپس جلسات خودمان بدون توجه به کوکی ها کار خواهند کرد. اما آیا موافق هستید - وقتی شخص دیگری این کار را انجام دهد خوشایندتر است؟ ;-)

به طور پیش فرض، هر دو گزینه در نسخه های اخیر PHP فعال هستند. PHP چگونه با این موضوع برخورد می کند؟ آشپز همیشه به نمایش گذاشته می شود. و پیوندها تنها در صورتی تکمیل می شوند که PHP یک کوکی با شناسه جلسه را شناسایی نکرده باشد. هنگامی که کاربر برای اولین بار در این جلسه از سایت بازدید می کند، یک کوکی قرار می گیرد و لینک ها تکمیل می شوند. در درخواست بعدی، در صورت پشتیبانی از کوکی ها، PHP کوکی را می بیند و تکمیل لینک ها را متوقف می کند. اگر کوکی ها کار نکنند، PHP به درستی شناسه را به پیوندها اضافه می کند و جلسه از بین نمی رود.
کاربرانی که کوکی‌ها را فعال کرده‌اند، فقط یک بار پیوند طولانی با شناسه را می‌بینند.

فوو انتقال شناسنامه کامل شد.
اکنون تنها چیزی که باقی می ماند این است که فایل داده را در سمت سرور به آن متصل کنید.
PHP این کار را برای ما انجام خواهد داد. فقط نوشتن کافی است
session_start();
$_SESSION [ "test" ]= "سلام دنیا!" ;

و PHP متغیر تست را در فایل مرتبط با این جلسه می نویسد.
در اینجا یک نکته بسیار مهم وجود دارد.
آرایه $_SESSION- خاص
در واقع شامل متغیرهایی است که می خواهیم در اسکریپت های مختلف در دسترس قرار دهیم.
برای قرار دادن یک متغیر در یک جلسه، فقط آن را به عنصر آرایه $_SESSION اختصاص دهید.
برای دریافت مقدار آن، کافی است به همان عنصر دسترسی داشته باشید. یک مثال در زیر خواهد بود.

PHP همچنین جمع آوری زباله را مدیریت می کند - حذف فایل های قدیمی. و همچنین رمزگذاری داده ها و یک سری چیزهای ضروری دیگر. در نتیجه این مراقبت، کار با جلسات بسیار ساده است.
در اینجا ما در واقع به مثال نحوه عملکرد جلسات می رسیم.
یک مثال بسیار کوچک:
session_start();

اکو "شما این صفحه را به روز کردید". $_SESSION["counter"]++. "یک بار."
پژواک"
به روز رسانی"؛
?>

ما بررسی می کنیم که آیا یک متغیر شمارنده در جلسه داریم یا خیر، آن را با مقدار 0 ایجاد می کنیم و سپس مقدار آن را نمایش می دهیم و آن را یک افزایش می دهیم. مقدار افزایش یافته در جلسه نوشته می شود و دفعه بعد که اسکریپت فراخوانی می شود، متغیر دارای مقدار 1 و غیره خواهد بود.
خیلی ساده است.

برای دسترسی به متغیرهای جلسه در هر صفحه از سایت، باید در ابتدای هر فایلی که در آن به جلسات نیاز داریم، فقط یک خط (!) بنویسید:
session_start();
و سپس به عناصر آرایه $_SESSION دسترسی پیدا کنید. به عنوان مثال، یک بررسی مجوز چیزی شبیه به این است:
session_start();
اگر ($_SESSION [ "مجاز" ]<> 1 ) {
header("Location: /auth.php");
خروج؛
}

حذف متغیرها از یک جلسه
اگر register_globals=off دارید، فقط بنویسید
unset($_SESSION [ "var" ]);
اگر نه، پس نزدیکباید باهاش ​​بنویسم
session_unregister("var");

رایج ترین خطاهایی که PHP هنگام تلاش برای کار با جلسات ایجاد می کند موارد زیر است:
دو نفر از آنها
هشدار: کوکی جلسه ارسال نمی شود - سرصفحه ها قبلا ارسال شده اند
هشدار: محدود کننده کش جلسه ارسال نمی شود - سرصفحه ها قبلا ارسال شده اند

به همین دلیل، راه حل در این تاپیک توضیح داده شده است
سوم،
هشدار: open(/tmp\sess_SID، O_RDWR) ناموفق بود: چنین فایل یا دایرکتوری (2) در full_script_path در شماره خط وجود ندارد(قبلاً به نظر می رسید هشدار: نوشتن داده های جلسه (فایل ها) ناموفق بود. لطفاً بررسی کنید که تنظیمات فعلی session.save_path صحیح است (/tmp)),
اگر از انگلیسی ترجمه شود، مشکل را با جزئیات توضیح می دهد: مسیر دایرکتوری مشخص شده در php.ini که فایل های جلسه در آن نوشته شده است، در دسترس نیست. این خطا راحت ترین رفع آن است. فقط یک دایرکتوری را ثبت کنید که وجود دارد و قابل نوشتن است، برای مثال،
session.save_path = c:\windows\temp
و فراموش نکنید که بعد از این کار Apache را مجددا راه اندازی کنید.

همانطور که معلوم است، هوش انسان محدودیتی ندارد، بنابراین من مجبورم توضیح دهم:
پیامی در مورد خطای سوم (دایرکتوری پیدا نمی شود) به ناچار منجر به ظاهر شدن دو مورد اول می شود، زیرا پیام خطا به مرورگر و هدرها پس از عدم استفاده از آن خروجی می شود. بنابراین برای نتیجه گیری زودرس عجله نکنید، بلکه ابتدا مسیر درست را بنویسید!

رایج ترین مشکل بعدی هنگام کار با جلسات، میراث سنگین register_globals است. نام متغیرهای اسکریپت را که با شاخص های آرایه $_SESSION مطابقت دارند، ندهید!
با register_globals=on مقادیر روی یکدیگر بازنویسی می شوند و شما گیج می شوید.
و با register_globals=off، خطای دیگری ظاهر می‌شود: «اسکریپت شما احتمالاً متکی به یک اثر جانبی جلسه است که تا PHP 4.2.3 وجود داشته است.»، اگر اسکریپت دارای یک متغیر session است که مقدار ندارد، و یک متغیر سراسری با همنام . برای خلاص شدن از شر آن، همیشه باید متغیرها را قبل از استفاده مقداردهی اولیه کنید (یا حداقل وجود آنها را بررسی کنید) و نام متغیرهای سراسری را که منطبق با شاخص های آرایه $_SESSION باشد، ندهید.

اگر کار نمی کند، اما هیچ پیامی نمایش داده نمی شود، در همان ابتدای اسکریپت که مسئول نمایش همه خطاها روی صفحه است، دو خط اضافه کنید - ممکن است خطاهایی وجود داشته باشد، اما شما آنها را نمی بینید.
ini_set("خطاهای_نمایش" , 1 );
error_reporting (E_ALL);

یا خطاها را در error_log ببینید. به طور کلی، موضوع نمایش پیام های خطا از حوصله این مقاله خارج است، بنابراین فقط مطمئن شوید که حداقل می توانید آنها را ببینید. در این بخش می توانید کمی بیشتر در مورد یافتن خطاها مطالعه کنید.

اگر مطمئن هستید که هیچ خطایی وجود ندارد، اما مثال داده شده به هر حال کار نمی کند، شاید PHP انتقال شناسه از طریق URL را فعال نمی کند. و کوکی ها به دلایلی کار نمی کنند.
ببینید چه مشکلی در کوکی های شما وجود دارد.
به طور کلی، اگر جلسات شما کار نمی کند، ابتدا سعی کنید شناسه جلسه را به صورت دستی ارسال کنید، یعنی یک پیوند ایجاد کنید و یک شناسه به آن اختصاص دهید:
session_start();
if (!isset($_SESSION [ "counter" ])) $_SESSION [ "counter" ]= 0 ;
اکو "شما این صفحه را به روز کردید". $_SESSION["counter"]++. "یک بار

به روز رسانی"؛
?>

با این حال، باید مطمئن شوید که دستورالعمل session.use_only_cookies فعال نیست، که مانع از آن می شود که PHP شناسه جلسه را در صورت ارسال از طریق URL بپذیرد.

اگر این مثال کار نکرد، پس مشکل یا بی اهمیت است غلط املایی(نیمی از "مشکلات" مربوط به جلسات از یک نام متغیر اشتباه املایی ناشی می شود)، یا در نسخه خیلی قدیمی PHP: پشتیبانی از جلسات در نسخه 4.0 ظاهر شد و آرایه $_SESSION- در 4.1 (قبل از این استفاده می شد HTTP_SESSION_VARS $).
اگر کار کرد، پس مشکل در کوکی هاست. نظارت کنید که سرور چه نوع کوکی را برای مرورگر تنظیم می کند و آیا مرورگر آن را برمی گرداند یا خیر. جستجو با مشاهده تبادل هدرهای HTTP بین مرورگر و سرور بسیار مفید است.
توضیح نحوه کار کوکی ها فراتر از محدوده این متن طولانی است، اما حداقل مطمئن شوید که سرور یک کوکی با یک شناسه ارسال می کند و مرورگر آن را برمی گرداند. و در عین حال شناسه ها با یکدیگر مطابقت دارند =)
تنظیم کوکی باید به این صورت باشد
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6;
یا چگونه
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; مسیر=/
(اگر اسکریپت را نه از دایرکتوری ریشه درخواست می کنید)
پاسخ سرور باید شبیه باشد
کوکی: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6
یا
کوکی: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b
اگر مرورگر کوکی هایی غیر از شناسه جلسه را برگرداند.

اگر مرورگر کوکی‌ها را برنمی‌گرداند، بررسی کنید که آیا کوکی‌ها اصلاً کار می‌کنند یا خیر.
اطمینان حاصل کنید که دامنه ای که به آن دسترسی دارید یک نام معمولی (با حداقل یک نقطه و بدون نویسه غیرقانونی مانند زیرخط) داشته باشد و حافظه پنهان مرورگر خود را پاک کنید - اینها دو دلیل اصلی هستند که ممکن است کوکی ها کار نکنند.

اگر مثال از اینجا کار می کند، اما کد شما کار نمی کند، پس واضح است که مشکل در جلسات نیست، بلکه در الگوریتم است. به دنبال جایی باشید که متغیر را گم کرده اید، مثال را مرحله به مرحله از اینجا منتقل کنید و اسکریپت خود را اشکال زدایی کنید.

اگر از تغییر مسیر سرصفحه یا ناوبری جاوا اسکریپت استفاده کنید، ممکن است مشکل دیگری ایجاد شود.
واقعیت این است که PHP به طور خودکار شناسه جلسه را فقط به پیوندهایی مانند آن اضافه می کند
، اما این کار را برای هدرها، جاوا اسکریپت، متا تگ ها انجام نمی دهد.
بنابراین، شما باید شناسه را به صورت دستی اضافه کنید، به عنوان مثال، مانند زیر:
header("Location: /script.php?" . session_name(). "=" . session_id());

همچنین، یک مشکل بسیار نادر، و کاملاً مشخص نیست که از کجا می آید، این است که تنظیمات session.save_handler مقداری متفاوت از فایل ها دارد. اگر اینطور نیست، آن را اصلاح کنید.

ایمنی
امنیت جلسه یک موضوع گسترده است. بنابراین، من بر روی چند نکته اصلی تمرکز می کنم.
بهترین کتاب درسی این است که شناسه را از نوار آدرس عبور ندهید. این حتی در php.ini نوشته شده است، اما این کارکرد جلسات را محدود می کند. اگر تصمیم دارید این توصیه را دنبال کنید، علاوه بر session.use_trans_sid = 0، session.use_only_cookies = 1 را فراموش نکنید
توصیه می شود جلسه را به یک آدرس IP متصل کنید: به این ترتیب، اگر شناسه به سرقت رفته باشد، شرور همچنان نمی تواند در بیشتر موارد از آن استفاده کند.
توصیه می شود از دستورالعمل session.save_path استفاده کنید که به شما امکان می دهد دایرکتوری خود را برای ذخیره فایل های جلسه تنظیم کنید. این امن تر از ذخیره آنها در فهرست موقت مشترک پیش فرض سرور است.

اطلاعات تکمیلی:

  • علاوه بر کوکی‌ها، مکانیسم جلسه همچنین هدرهایی را ارسال می‌کند که ذخیره‌سازی صفحه را ممنوع می‌کند (همان محدودکننده کش). برای html این درست و ضروری است. اما زمانی که می خواهید فایلی را با استفاده از اسکریپتی که مجوز را بررسی می کند ارسال کنید، اینترنت اکسپلورر از دانلود آن امتناع می کند. به خاطر این عنوان است. تماس بگیرید
    session_cache_limiter("خصوصی");
    باید قبل از شروع جلسه مشکل را حل کند.
  • ممکن است عجیب به نظر برسد، اما در آرایه $_SESSIONشما نمی توانید از شاخص های عددی استفاده کنید - $_SESSION [ 1 ]، $_SESSION [ "10" ]- جلسات کار نخواهد کرد.
  • جایی بین نسخه های 4.2 و 5.0 امکان تنظیم session.use_trans_sid با استفاده از آن وجود نداشت. ini_set(). با شروع از 5.0 دوباره امکان پذیر است.
  • قبل از نسخه 4.3.3 کوکی، PHP تنها در صورتی یک کوکی ارسال می کرد که هنگام شروع جلسه هیچ شناسه ای در درخواست وجود نداشت. اکنون در هر تماس یک کوکی ارسال می شود session_start()

    نمونه ای از مجوز با استفاده از جلسات
    بیایید همه موارد فوق را با یک مثال کوچک توضیح دهیم:
    بیایید فایل auth.php را ایجاد کنیم:
    if (isset($_POST [ "auth_name" ]))
    {
    $sql = "انتخاب * از کاربران WHERE name=?s";
    $row = $db -> getRow($sql, $_POST["auth_name"]);
    if ($row && password_verify ($_POST [ "auth_pass" ], $row [ "pass" ])) (
    $_SESSION [ "user_id" ] = ردیف $ [ "id" ];
    }
    header("مکان: http://" . $_SERVER [ "HTTP_HOST"]. $_SERVER [ "REQUEST_URI" ]);
    خروج؛
    }

    if (isset($_GET [ "action" ]) AND $_GET [ "action" ]== "logout" ) (
    session_start();
    session_destroy();
    header("مکان: http://" . $_SERVER [ "HTTP_HOST" ]. "/" );
    خروج؛
    }

    if (!isset($_SESSION [ "user_id" ])) (
    ?>








    خروج؛
    }

    اکنون تنها کاری که باید انجام دهید این است که خط را در تمام اسکریپت های محافظت شده بنویسید
    نیاز به "auth.php" ;
    این مثال فرض می‌کند که جلسه قبلاً شروع شده است و یک اتصال به پایگاه داده با استفاده از کلاس برای کار ایمن و راحت با MySQL ایجاد شده است. همچنین فرض می کند که رمز عبور با استفاده از تابع توصیه شده password_hash هش شده است.
    نمونه ای از یک فایل محافظت شده:

    session_start();
    شامل "safemysql.class.php" باشد.
    $db = new safemysql ([ "db" => "test" ]);
    شامل "auth.php" ;
    ?>
    راز

    خروج

    OPS! لینک های بسیار مفید:
    http://www.php.net/manual/ru/ref.session.php - آخرین و جدیدترین اطلاعات در مورد پشتیبانی جلسه در PHP در اسناد رسمی، به علاوه نظرات متعدد کاربران. خواندن بسیار توصیه می شود.
    http://phpclub.ru/manrus/f/ref.session.html - ترجمه بسیار قدیمی این فصل به روسی، از اسناد ترجمه شده توسط الکساندر پیرامیدین.
    http://phpclub.ru/detail/article/sessions
    مقاله ای با عنوان رقت انگیز "حقیقت در مورد جلسات". تصوری دوسوگرا به جا می گذارد. در ابتدا، نویسنده به وضوح در مورد مکانیسم جلسه صحبت می کند، اما روش هایی که او تا پایان مقاله ارائه می دهد کاملاً نامشخص است.

    مقاله کتاب درسی توسط دیمیتری بورودین از سایت
    http://php.spb.ru/ به شدت توصیه نمی شود.
    بچه ها خیلی قدیمی شده نه تنها حاوی نادرستی واقعی است، بلکه جلسات در PHP به سادگی برای مدت طولانی کار نمی کنند.
    با تشکر فراوان از دیما برای آن، این اولین مقاله در مورد جلسات به زبان روسی بود، من خودم از آن مطالعه کردم، اما اکنون باید آن را به یک استراحت شایسته ارسال کنم.
    همچنین متاسفانه بسیاری از مقالات دیگر که در اینترنت هستند و سال هاست به روز نمی شوند نیز قدیمی هستند.