سؤال

هل من الآمن الكتابة فوق العالمية الفائقة $_SESSION مع كائن جلسة متخصصة?

class SessionObject implements ArrayAccess { ... }

...

// Session data has just been deserialised from store.
$_SESSION = new SessionObject( $session_data );

...

// Using session object...
$_SESSION['key'] = 27;
$x = $_SESSION->get_data('key2', 'default-value');
هل كانت مفيدة؟

المحلول

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

اعتقد انها الإختراق unpleasant وغير سارة واحدة abuse لإساءة استخدام طبيعة فائقة العالمية لل $_SESSION بهذه الطريقة.

أفضل ، في رأيي ، سيكون لكتابة فئة مع أساليب ثابتة للحصول على وتعيين البيانات الخاصة بك:

class Session {
    public function get($key, $defaultValue = null) {
        // do some code to get the value for $key, and return $defaultValue if there is none
    }

    public function set($key, $value) {
        // do some code to set $key
    }
}

هل يمكن بعد ذلك الوصول إلى هذا مع Session::get('someKey') أو Session::get('someKey', 'default') و Session::set('someKey', 'someValue').

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

إذا كنت ترغب في استخدام أساليب الكائن لسبب التصميم ، قد يكون من الأفضل لتنفيذ نمط المفرد.

نصائح أخرى

تبدو مخاطرة بعض الشيء بالنسبة لي.هل تحققت من طريقة session_set_save_handler ؟يتيح لك تعيين المعالج الخاص بك لاستخدامه ، بدلاً من محاولة الكتابة فوق $ _SESSION.

إذا كنت تتعامل مع التعامل مع الجلسة وتخزينها بنفسك ، فيمكنك فعل ما يحلو لك.يمكن استخدام $ _SESSION superglobal مثل أي متغير آخر في هذا الصدد.

هو فقط معالج الجلسة الافتراضي في PHPs الذي يتعامل معه بشكل خاص.يتوقع مصفوفة عادية هناك (ويجب ألا يتم فهرستها عدديًا أيضًا).إذا أردت استخدام ذلك مرة أخرى ، فستحتاج إلى التراجع عن التفاف ArrayObject الرائع باستدعاء إيقاف التشغيل: Genacodicetagpre

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