نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

طول عمر جلسه PHP. افزایش طول عمر جلسه در PHP

برای تغییر طول عمر جلسه، باید تعدادی از مراحل را طی کنید:

1) ساختار PHP به گونه ای است که برای تغییر طول عمر جلسه باید یک دایرکتوری جداگانه برای این جلسات ایجاد کنید. به عنوان مثال، شما می خواهید کل سایت طول عمر یکسانی داشته باشد. سپس در داخل این سایت یک دایرکتوری برای جلسات ایجاد کنید که در آن ذخیره می شوند.

موضوع این است که به طور پیش فرض مترجم PHPاز یک دایرکتوری برای ذخیره جلسات برای همه سایت ها استفاده می کند. به همین دلیل، اگر یک سایت طول عمر کمتری نسبت به سایرین داشته باشد، اسکریپت "زباله جمع آوری" این سایت "کم عمر" نه تنها خود، بلکه تمام فایل های جلسه را نیز پاک می کند. اخرین بروزرسانیکه بیشتر از طول عمر جلسه این سایت خاص تغییر نکرده اند. بنابراین، اگر 3 سایت با طول عمر جلسه به ترتیب 30، 60 و 120 دقیقه داشته باشیم، طول عمر جلسه برای ALL سایت ها برابر با 30 دقیقه خواهد بود. زباله جمع کن اینگونه کار می کند - تشخیص نمی دهد که جلسه مربوط به این سایت است یا شخص دیگری.

به عنوان مثال، ما یک وب سایت داریم که در /www/mysite.ru قرار دارد.

بیایید یک پوشه جلسه در داخل آن ایجاد کنیم

# سی دی /www/mysite.ru
# جلسه mkdir
# جلسات www-data:www-data را انتخاب کنید
# chmod 700 جلسه


در اینجا، به جای www-data، از نام کاربری و رمز عبوری که Apache تحت آن اجرا می شود استفاده کنید (می توانید آنها را در تنظیمات آپاچی یا از خروجی دستور ps پیدا کنید).

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

2) ب فایل های PHPقبل از session_start()، باید خطوط زیر را وارد کنید:

ini_set("session.gc_maxlifetime", 86400);
ini_set("session.cookie_lifetime", 86400);
ini_set("session.save_path", $_SERVER["DOCUMENT_ROOT"] ."/sessions");


در اینجا 86400 طول عمر جلسه بر حسب ثانیه است.

چرا از طریق PHP و نه از طریق "php_value" در htaccess. زیرا در اینجا برای ما راحت است که از متغیر $_SERVER["DOCUMENT_ROOT"] استفاده کنیم، بدون اینکه به دایرکتوری خاصی نسبت به سیستم فایلسرور

خط اول و دوم را می توان با htaccess نوشت، اما من نمی بینم که آنها را در دو فایل مختلف پراکنده کنیم.

3) جمع‌آوری زباله اسکریپتی است که با باز شدن یک صفحه با احتمال کمی اجرا می‌شود. واقعیت این است که برای کاهش بار روی سرور، با احتمال 100٪ شروع نمی شود. پیش فرض 1٪ است. بنابراین، تنها در 1٪ موارد، هنگام باز کردن یک صفحه، اعتبار جلسه بررسی می شود (به عنوان مثال، "منقضی شده است یا خیر").

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

ini_set("session.gc_probability", "100");

session.gc_probability می تواند مقادیری را از 1 تا 100 بگیرد - به ترتیب از 1٪ تا 100٪. اگر آن را روی 100 تنظیم کنید، وقتی کاربران هر صفحه را باز می کنند، زباله جمع کن همیشه اجرا می شود. این باعث افزایش بار روی سرور می‌شود، اما به این ترتیب تضمین می‌کنید که جلسه بیشتر از طول عمری که مشخص کرده‌اید زنده نخواهد ماند.

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

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

این برای چیست؟ افزایش طول عمر جلسه در PHP? اکثر دلیل مشترک- این برای افزایش طول عمر مجوز کاربر است که بر اساس جلسات ساخته شده است. به طور معمول، به طور پیش فرض، جلسه ذخیره می شود 15 دقایق. بر این اساس، از طریق 15 پس از چند دقیقه عدم فعالیت، کاربر به طور خودکار از سیستم خارج می شود و باید دوباره وارد سیستم شود.

ساده ترین گزینه برای تمدید جلسه، تغییر فایل است php.ini(متغیر session.gc_maxlifetime، با این حال، شما به سختی چنین فرصتی دارید (مگر اینکه، البته، شما صاحب سرور باشید). بنابراین، بیشترین بهترین گزینهبه فایل اضافه خواهد شد htaccessاین خط:

Php_value session.gc_maxlifetime 3600

در اینجا مقدار متغیر را تغییر داده ایم session.gc_maxlifetimeبر 3600 ثانیه اکنون جلسه ما دقیقاً ذخیره می شود 1 ساعت اگر قرار دهید 0 ، سپس جلسه برای مدت نامحدودی ذخیره می شود، که من به شما توصیه نمی کنم انجام دهید، به جز برای سرور محلی. از آنجایی که هنگام ایجاد و اشکال زدایی یک وب سایت راحت است.

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

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

اکنون می دانید که چگونه محدودیت را حذف کنید طول عمر جلسه در PHPو امیدوارم که سایت شما به این ترتیب برای شما و کاربران شما بسیار راحت تر شود.

01/19/17 7.5K

با استفاده از یک جلسه 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 از طریق یک جلسه مجوز می دهد، با استفاده از تابع session_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 بالا را روی سرور اجرا می کنیم، پیام زیر را دریافت می کنیم. این شامل آرایه ای از متغیرهای جلسه با مقادیر جدید آنها خواهد بود.

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

وجود داشته باشد راه های مختلفتنظیم طول عمر جلسه بیایید سعی کنیم با یک مثال آن را بفهمیم سیستم عامل لینوکس.

چگونه طول عمر جلسه را بفهمیم

قبل از تنظیم، ارزش نگاه کردن را دارد وضعیت فعلی. چندین روش برای انجام این کار وجود دارد:

1. روی سرور با استفاده از دستور php

php -i | جلسه grep

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

  • session.cookie_lifetime => 0 => 0
  • session.gc_maxlifetime => 1440 => 1440

این مقادیر مقدار پیش فرض هستند. cookie_lifetime => 0قبل از بستن در مورد تأثیر کوکی ها صحبت می کند مرورگر، اگر این پارامتر را روی یک مقدار مشخص قرار دهید، جلسه با فعال بودن جلسه قطع می شود، بنابراین بهتر است آن را روی صفر بگذارید.

2. با استفاده از تابع php ini_get

$maxlifetime = ini_get("session.gc_maxlifetime");
$cookielifetime = ini_get("session.cookie_lifetime");

Echo $maxlifetime;
echo $cookielifetime;

systemctl راه اندازی مجدد apache2 || systemctl راه اندازی مجدد httpd

* V نسخه های لینوکسبدون systemd از دستور استفاده می کنیم راه اندازی مجدد سرویس apache2یا راه اندازی مجدد سرویس httpd.

اگر از FastCGI (PHP-FPM) استفاده کنیم:

پیکربندی از طریق فایل htaccess

این فایل به مدیر وب سایت اجازه می دهد تا برخی از تنظیمات وب سرور را مدیریت کند. برای ویرایش آن باید به فایل های سایت دسترسی داشته باشید. اگر کنترل کننده PHP Apache نباشد، این روش کار نخواهد کرد، اما برای مثال، NGINX+ PHP-FPM. اگرچه، یک راه نیز وجود دارد (در زیر در مورد آن بیشتر توضیح می دهیم).

موارد زیر را به فایل htaccess اضافه می کنیم:

php_value session.gc_maxlifetime 86400
php_value session.cookie_lifetime 0

* همانطور که می بینید، پارامترها مانند پیکربندی از طریق php.ini هستند.

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

فایل پیکربندی وب سرور را به عنوان مثال در php-fpm باز کنید:

vi /etc/php-fpm.d/www.conf

و ویرایش/افزودن:

php_value = 86400
php_value = 0

سپس سرویس را دوباره راه اندازی می کنیم:

systemctl راه اندازی مجدد php-fpm || راه اندازی مجدد سرویس php-fpm

تنظیم یک پارامتر در کد برنامه

این روش ممکن است مفید باشد زمانی که صفحات مختلفپورتال باید داشته باشد زمان متفاوتجلسه زندگی برای این کار می توانید از توابع PHP ini_set و session_set_cookie_params استفاده کنید، به عنوان مثال:

Ini_set("session.gc_maxlifetime", 86400);
ini_set("session.cookie_lifetime", 0);
session_set_cookie_params(0);

Session_start();

توابع باید قبل از باز کردن یک جلسه (session_start) فراخوانی شوند.

راه اندازی یک جلسه در برنامه

برخی از برنامه ها ممکن است تنظیمات را لغو کنند. در این مورد، باید طول عمر جلسه را در پارامترهای برنامه تنظیم کنید. هر برنامه تنظیمات مخصوص به خود را دارد که باید خودتان آن ها را مشخص کنید. بیایید مثالی از راه اندازی یک جلسه در Bitrix CMS بزنیم.

برویم به گروهی از کاربران- انتخاب یک گروه - ایمنی. پارامتر "زمان جلسه (دقیقه)" را پیدا کنید و زمان را به عنوان مثال 1440 (24 ساعت در دقیقه) تنظیم کنید.

نحوه تمدید خودکار جلسات

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

اگر مقدار cookie_lifetime را روی 86400 قرار دهیم، پس از 24 ساعت جلسه خاتمه می یابد. این همیشه راحت نیست.

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

مسیر ذخیره فایل جلسه

محل ذخیره فایل های جلسه با پارامتر مشخص می شود session.save_pathهمچنین زمان زندگی نیز چنین است. به طور پیش فرض می توان از مسیر استفاده کرد /var/lib/php/sessions.

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

بهترین مقالات در این زمینه