session - مهلة جلسة PHP





redirect login timeout (8)


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

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

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

$_SESSION['id'] = $id;

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

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




أولاً ، تخزين آخر مرة قدم فيها المستخدم طلبًا

<?php
  $_SESSION['timeout'] = time();
?>

في الطلب التالي ، تحقق من الوقت الذي تقدموا فيه الطلب السابق (10 دقائق في هذا المثال)

<?php
  if ($_SESSION['timeout'] + 10 * 60 < time()) {
     // session timed out
  } else {
     // session ok
  }
?>



<?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
}
?>



<?php 
session_start();

if (time()<$_SESSION['time']+10){
$_SESSION['time'] = time();
echo "welcome old user";
}

else{
session_destroy();
session_start();
$_SESSION['time'] = time();
echo "welcome new user";
}
?>



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

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

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

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

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




    session_cache_expire( 20 );
    session_start(); // NEVER FORGET TO START THE SESSION!!!
    $inactive = 1200; //20 minutes *60
    if(isset($_SESSION['start']) ) {
$session_life = time() - $_SESSION['start'];
if($session_life > $inactive){
    header("Location: user_logout.php");
}
    }
    $_SESSION['start'] = time();

    if($_SESSION['valid_user'] != true){
    header('Location: ../....php');
    }else{  

المصدر: http://www.daniweb.com/web-development/php/threads/124500




ما عليك سوى التحقق أولاً من أن الجلسة لم يتم إنشاؤها فعلاً وإذا لم يتم إنشاء واحدة. أنا هنا وضعه لمدة 1 دقيقة فقط.

<?php 
   if(!isset($_SESSION["timeout"])){
     $_SESSION['timeout'] = time();
   };
   $st = $_SESSION['timeout'] + 60; //session time is 1 minute
?>

<?php 
  if(time() < $st){
    echo 'Session will last 1 minute';
  }
?>



Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true 
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings: "Hi" . "Ha"






php session redirect login timeout