سؤال

أريد أن يتم تسجيل المستخدمين تلقائيًا بعد X دقائق من عدم النشاط. أريد أيضًا أن تدمر جميع الجلسات.

كيف يمكن القيام بذلك؟ كيف يمكنني التحقق من عدم النشاط ثم تنفيذ وظيفة لتسجيلها ؟؟؟

هل كانت مفيدة؟

المحلول

يمكنك أيضا أن تفعل:

$_SESSION['loginTime'] = time();

في كل صفحة ، وعندما يحاول المستخدم التنقل وكان غير نشط لمدة عشرين دقيقة ، يمكنك تسجيله مثل هذا:

if($_SESSION['loginTime'] < time()+20*60){ logout(); }

نصائح أخرى

لقد تعبت من اقتراب ميشيلز ولم أحصل على أي مكان. عند التحقيق ، رأيت أن البيان إذا أضاف فترة انتهاء الصلاحية إلى الوقت الحالي حتى لا يتم إطلاق البيان مطلقًا.

هذه هي نسختي المتغيرة:

اضبط هذا عند تسجيل الدخول إلى المستخدم أو تحميل صفحة آمنة:

 $_SESSION['expire'] = time()+1*60;

واستخدم هذا لمعرفة ما إذا كان وقت انتهاء الصلاحية أقل من الوقت الحالي (أي أننا تجاوزنا حد انتهاء الصلاحية):

if(time() > $_SESSION['expire']){
 $user -> logout();
}

يمكنك تعيين وقت وقت الخروج مثل:

ini_set('session.gc_maxlifetime',30);

هذا هو الحل المحتمل لك.

اعتمادًا على مدى سرعة خادمك وعدد المستخدمين لديك ، يمكنك إرسال طلب إلى الخادم الخاص بك كلما قام المستخدم بأي شيء (ينقل ، ينقر على زر ، أيا كان). من هذا الطلب ، قم بتحديث جدول SQL مع آخر نشاط نشاطه.

احصل على وظيفة cron عبر الطاولة في بعض الفاصل الزمني العادي وحذف جلسات المستخدمين الذين كانوا غير نشطين لأي شيء ستكون عليه عتبة.

إذا كان الخادم الخاص بك بطيئًا أو كان لديك الكثير من المستخدمين ، فيمكنك تشغيل هذا البرنامج النصي بشكل غير متكرر.

تحتوي آلية جلسة PHP بالفعل على جامع القمامة على أساس مهلة عدم النشاط. ليس لديك قلق بشأن.

يمكنك تعيين آخر وقت نشط بمقدار $ _session ['lastactive'] = time () وتحديثه في كل مرة ينقل فيها المستخدم إلى صفحة جديدة. ثم يمكنك الحصول على مهلة وظيفة () في كل صفحة.

function timeout()    
{
    $maxtime = 60*2; // Here , maxtime has been set to 2 minutes

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] > $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit.
{
    signout(); //logging out        
}

if(isset($_SESSION['lastactive']) and (time() - $_SESSION['lastactive'] < $maxtime )) // subtracting current time from lastactive time and seeing if it exceeded timeout limit.
{   
    return 1; // timeout limit not exceeded     
}   
else
{
    if(!isset($_SESSION['lastactive']))
    {

        $_SESSION['lastactive'] = time(); //if lastactive is not set
    }
}
}

يستخدم unset($_SESSION['NAME']); أو session_destroy();. يمكنك أيضا تغيير قيمة الجلسة.

للقيام بذلك في وقت معين ، ستحتاج إلى تعيين طابع زمني في قاعدة البيانات ، ثم اتصل به للتحقق مما إذا كان يتجاوز x دقيقة. انظر إلى الرابط في الأسفل.

أنا شخصياً فقط أستخدم ملفات تعريف الارتباط وجعلها تنتهي صلاحيتها في وقت معين ، ولكن أيا كان ما يطفو قاربك.

إذا كان الوقت الحالي أكثر من 30 ثانية من الوقت X (من قاعدة البيانات)


$ (وثيقة). Ready (function ()
{
setTimeout (function () { call logout.php عبر Ajax }, 720000);

});

720000 يعني 12 دقيقة (لغرض التوضيح)
ضع هذا البرنامج النصي في رأسك وضبط وقت عدم النشاط الخاص بك
يمكنك ضبط الوقت الذي تريده ، فسيكون العمل كما لو قمت بتعيين 5 دقائق ثم عند تسجيل الدخول إلى النظام ، ثم تبدأ في العد لمدة 5 دقائق. ولكن إذا قمت بالنقر فوق أي وحدة نمطية ، فسيتم إعادة تحميل هذا البرنامج النصي ، لأنه عندما يتحول الصفحة ، يكون الرأس أيضًا إعادة تحميل عند إعادة تحميل البرنامج النصي ، ثم يبدأ العد من 0 (أولي) ، ولكن إذا لم تتمكن من الوصول إلى النظام في غضون 5 دقائق. بعد ذلك ، سيتم تحميل logout.php وسيقوم النظام بتسجيل الخروج

هكذا أفعل ذلك:

//set timeout period in seconds
$idleTime= 60*2;
//check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout'])){
$session_life = time() - $_SESSION['timeout'];
if($session_life > $idleTime){
// your logout code here*
     }
}
$_SESSION['timeout'] = time();

هذا يجعل إعادة تعيين $ _session ['timeout'] في كل مرة يتم فيها إعادة تحميل الصفحة ، ولدي هذا في ملف تضمين في رأس كل صفحة فرعية ، يعمل بالنسبة لي على الأقل.

أبسط طريقة هي هذا. أرسل المستخدم إلى صفحة تسجيل الخروج إذا لم ينشطوا عناصر معينة على موقع الويب الخاص بك

$secondsWait = 300; // these are seconds so it is 300s=5minutes
header("refresh:$secondsWait; logout.php");

محتويات إعادة التوجيه ... logout.php ، تدمير أي جلسات وربما أيضًا إرسال رسالة تنبه المستخدم لماذا تم تسجيلها

<?php
session_start();
session_unset();
session_destroy();  
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top