سؤال

أنا أحاول أن أكتب مخصص الدورة persister في PHP.ولكن لسبب سوى جلستي قراءة functon هو الحصول على ما يسمى ليست دورة كتابة وظيفة.وبالتالي فإن الدورة لا تزال قائمة.إذا كنت التبديل مرة أخرى إلى الإعدادات الافتراضية الدورة معالج (ملف) ، يعمل كل شيء.إذا قمت بإضافة session_write_close() في نهاية الاختبار سكربت - يعمل كل شيء.ولكن PHP دليل صراحة الدول التي لا تحتاج إلى صراحة استدعاء session_write_close() لأنه يحصل تلقائيا دعا في نهاية البرنامج النصي.وأنا لا أريد أن أضع session_write_close() في كل نقطة الخروج في القائمة التطبيق!

هنا بعض التعليمات البرمجية التي يوضح المشكلة.أنا تشغيله على ويندوز إكس بي SP3 + أباتشي 2.2.9 + PHP 5.2.6.ملف السجل فقط يحتوي على إدخالات s_open() و s_read().

<?php
function logger($str)
{
    file_put_contents('session_log.txt', date('Y-m-d h:i:s') . " $str\r\n", FILE_APPEND);
}

function s_open()
{
    logger('s_open');
    return true;
}

function s_close()
{
    logger('s_close');
    return true;
}

function s_read()
{
    logger('s_read');
    return @file_get_contents('session.txt');
}
function s_write($id, $data)
{
    logger("s_write: $id - $data");
    file_put_contents('session.txt', $data);
    return true;
}

function s_destroy()
{
    logger('s_destroy');
    return true;
}

function s_gc()
{
    logger('s_gc');
    return true;
}

session_set_save_handler('s_open', 's_close', 's_read', 's_write', 's_destroy', 's_gc');

session_start();

if ( isset($_SESSION['time']) )
    echo 'Session time: ' . date('Y-m-d h:i:s', $_SESSION['time']);
else
    echo 'Session empty';
echo '<br>';    
echo 'Session ID: ' . session_id();


$_SESSION['time'] = time();
?>
هل كانت مفيدة؟

المحلول

Blargh!تم القبض على إشعار بأن PHP نفسها قد وضعت هناك!على حد تعبير دليل:

تحذير

دليل العمل الحالي هو تغيير مع بعض SAPIs إن جلسة مغلقة في إنهاء البرنامج النصي.فمن الممكن أن إغلاق الجلسة السابقة مع session_write_close().

كان في الواقع تغيير و المكالمات s_write() و s_close() تم تسجيل في دليل آخر!

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