ماذا يحدث للمجموعة $ _SESSION إذا مرات في جلسة PHP في منتصف هذا الطلب؟

StackOverflow https://stackoverflow.com/questions/1002935

  •  05-07-2019
  •  | 
  •  

سؤال

ولقد تساءلت دائما، إذا كان مهلة جلسة PHP من خلال منتصف تنفيذ السيناريو، ستظل محتويات المصفوفة $ _SESSION متاحة حتى ينتهي تنفيذ البرنامج النصي؟ على سبيل المثال:

session_start();

if(! isset($_SESSION['name'])) {
    echo 'Name is not set';
    exit;
}

// imagine there is a bunch of code here and that the session times out while
// this code is being executed

echo 'Name is ', $_SESSION['name']; // will this line throw an error?

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

session_start();

if(isset($_SESSION['name'])) {
    $name = $_SESSION['name'];
} else {
    echo 'Name is not set';
    exit;
}

// bunch of code here

echo 'Name is ', $name;
هل كانت مفيدة؟

المحلول

لا داعي للقلق حول مثل هذه الأمور. لن يحدث شيء في الدورة. لقد initialised من قبل sessioni_start() و$_SESSION سوف تكون متاحة دائما ضمن البرنامج النصي.

نصائح أخرى

وعمر الجلسة لمدة ثلاث ساعات الافتراضي هو إعادة في كل مرة تفتح الدورة (انظر <لأ href = "http://us.php.net/manual/en/function.session-cache-expire.php" يختلط = "نوفولو noreferrer"> session_cache_expire )، وبالتالي فإن الطريقة الوحيدة جلسة قد مهلة في منتصف طلب هو إذا طلب يأخذ ثلاث ساعات لمعالجة. افتراضيا تطلب PHP المهلة بعد 30 ثانية فقط، لذلك ليس هناك خطر من انتهاء جلسة خلال الطلب. وعلاوة على ذلك، فإن المتغير $_SESSION لن تتغير فجأة في منتصف هذا الطلب. لقد بالسكان عندما تبدأ الدورة، وهذا كل شيء.

ويتم نسخ المتغيرات في عالمي $ _SESSION بناء على طلب الأولي، لذلك لديه نفس التأثير كما نسخها إلى متغير محلي.

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

وماذا كنت في حاجة لفهم كيف تعمل الجلسات. عميل الوصول إلى برنامج نصي باستخدام _SESSION $ العالمية عظمى لا يعرف سوى مفتاح الدورة التي ينتمي إليها (المخزنة في كوكي / URL). وهذا يعني أن بيانات الجلسة نفسها له علاقة مع العميل شيئا. إذا كان لديك مفتاح بيانات الجلسة التي تريد استخدامها ثم يمكنك استخدامه. كانت الإصدارات القديمة من PHP بعض الثغرات الأمنية لجلسات حيث تخزينها في مكان ما كان يمكن الوصول إليها بسهولة (لا أتذكر التفاصيل).

وفي الأساس، إذا كان لديك معرف جلسة في السيناريو PHP لديك حق الوصول إلى تلك الدورة ما لم يتم مسح الذاكرة على آلة / طوة فاسد (أي إعادة تشغيل الكمبيوتر / فشل الأجهزة).

ويساعد هذا الأمل، وإلا الذهاب إلى php.net والغوص في التفاصيل حول كيفية عمل جلسات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top