شرح صفوف ومحتوى الفقرة
لا تعتمد فقط على جامع المهملات الاحتمالي في PHP (session.gc_maxlifetime) لإنهاء الجلسات الخاملة؛ بل تتبع الطابع الزمني $_SESSION["last_activity"] برمجياً في كل طلب.
- في كل طلب لمستخدم مسجل، افحص ما إذا كان
time() - $_SESSION["last_activity"] > $maxIdleSeconds. - إذا تجاوزت مدة الخمول الحد المسموح (مثل 1800 ثانية أي 30 دقيقة)، أفرغ مصفوفة
$_SESSIONودمّر الجلسة وحوّل المستخدم لصفحة الدخول. - أما إذا كانت الجلسة نشطة، فحدّث
$_SESSION["last_activity"] = time()لتمديد نافذة النشاط.
بما أن فترة الخمول البالغة 2400 ثانية تجاوزت الحد المسموح 1800 ثانية، يتم تفريغ الجلسة وإنهاؤها فوراً.
PHP
<?php
$now = 1762552000;
$maxIdle = 1800; // 30 minutes
$_SESSION = ['user_id' => 7, 'last_activity' => $now - 2400];
if (isset($_SESSION['last_activity']) && ($now - $_SESSION['last_activity']) > $maxIdle) {
$_SESSION = [];
echo "Session timed out after 1800s of inactivity!\n";
} else {
$_SESSION['last_activity'] = $now;
echo "Session active.\n";
}