مهلة جلسة PHP


Answers

عندما تنتهي مدة صلاحية البيانات لم تعد موجودة ، لذلك شيء من هذا القبيل

if (!isset($_SESSION['id'])) {
    header("Location: destination.php");
    exit;
}

سيعيد التوجيه كلما لم تعد الجلسة نشطة.

يمكنك تعيين مدة بقاء ملف تعريف ارتباط session.cookie_lifetime باستخدام session.cookie_lifetime

ini_set("session.cookie_lifetime","3600"); //an hour

تعديل: إذا كنت تعمل على توقيت جلسات العمل بسبب القلق الأمني ​​(بدلاً من الراحة) ، استخدم الإجابة المقبولة ، كما تظهر التعليقات أدناه ، يتم التحكم في ذلك من قبل العميل وبالتالي غير آمن. لم افكر ابدا في هذا كإجراء أمني.

Question

أنا بصدد إنشاء جلسة عند تسجيل دخول مستخدم مثل:

$_SESSION['id'] = $id;

كيف يمكنني تحديد مهلة في هذه الجلسة من الدقائق X ومن ثم القيام بها وظيفة أو إعادة توجيه الصفحة بمجرد وصولها إلى × دقيقة؟

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




<?php
session_start();
if($_SESSION['login'] != 'ok')
    header('location: /dashboard.php?login=0');

if(isset($_SESSION['last-activity']) && time() - $_SESSION['last-activity'] > 600) {
    // session inactive more than 10 min
    header('location: /logout.php?timeout=1');
}

$_SESSION['last-activity'] = time(); // update last activity time stamp

if(time() - $_SESSION['created'] > 600) {
    // session started more than 10 min ago
    session_regenerate_id(true); // change session id and invalidate old session
    $_SESSION['created'] = time(); // update creation time
}
?>



حل Byterbit هو إشكالي بسبب:

  1. وجود انتهاء عنصر التحكم العميل من ملف تعريف ارتباط جانب الخادم مشكلة أمان.
  2. إذا كانت مهلة انتهاء الصلاحية المحددة على جانب الخادم أصغر من المهلة المحددة على جانب العميل ، فلن تعكس الصفحة الحالة الفعلية لملف تعريف الارتباط.
  3. حتى لو كان ذلك من أجل الراحة في مرحلة التطوير ، فهذه مشكلة لأنها لن تعكس السلوك الصحيح (في التوقيت) في مرحلة الإصدار.

لملفات تعريف الارتباط ، تعيين انتهاء الصلاحية عبر session.cookie_lifetime هو الحل الصحيح من حيث التصميم والحكمة! لإنهاء الجلسة ، يمكنك استخدام session.gc_maxlifetime.

إن انتهاء صلاحية ملفات تعريف الارتباط عن طريق استدعاء session_destroy قد يؤدي إلى نتائج غير متوقعة لأنه ربما تكون قد انتهت صلاحيتها بالفعل.

جعل التغيير في php.ini هو أيضًا حل صالح ولكنه يجعل انتهاء الصلاحية عالميًا للنطاق بأكمله والذي قد لا يكون ما تريده حقًا - قد تختار بعض الصفحات الاحتفاظ بملفات تعريف الارتباط أكثر من غيرها.




<script type="text/javascript">
window.setTimeout("location=('timeout_session.htm');",900000);
</script>

في رأس كل صفحة كان يعمل لي خلال اختبارات الموقع (الموقع لم يتم بعد في الإنتاج). تنهي صفحة HTML التي تنهيها الجلسة وتعلم المستخدم فقط بضرورة تسجيل الدخول مرة أخرى. هذا يبدو أسهل طريقة من اللعب مع منطق PHP. أنا أحب بعض التعليقات على الفكرة. أي الفخاخ لم أر في ذلك؟




Related