متغير غير معرف:$_SESSION
سؤال
انا احصل E_NOTICE
أخطاء في ملف CakePHP الأساسي عندما يحاول الإشارة إلى جلسة لم يتم تعيينها أو لم يتم تعيينها مطلقًا (cake/libs/cake_session.php line 372
):
function read($name = null) {
if (is_null($name)) {
return $this->__returnSessionVars();
}
if (empty($name)) {
return false;
}
$result = Set::classicExtract($_SESSION, $name);
}
لقد أجريت بحثًا في الكود الخاص بي (في التطبيق/ الدليل) ولم أتمكن من العثور على مراجع له $_SESSION
أو session_destroy
.هل أفتقد أي شيء؟
يظهر هذا الخطأ عندما أحاول تشغيل أي اختبارات للوحدة.هل هذا طبيعي؟لقد قمت بمسح cake/
الدليل واستبدلته بآخر (نفس الإصدار) فقط للتأكد من أنني لم أقم بتعديل أي شيء في الملفات الأساسية عن غير قصد، ولكن ما زلت أتلقى نفس الخطأ.لست متأكدًا مما إذا كان هذا مجرد خلل في الإطار أو أي شيء آخر.
يحرر
فيما يلي نتائج الاختبار الذي تم تشغيله على سطر الأوامر:
Welcome to CakePHP v1.3.11 Console
---------------------------------------------------------------
App : app
Path: /var/www/program/app
---------------------------------------------------------------
CakePHP Test Shell
---------------------------------------------------------------
Running app case models/owners_equity
E_NOTICE: Undefined variable: _SESSION in /var/www/program/cake/libs/cake_session.php on line 372
E_NOTICE: Undefined variable: _SESSION in /var/www/program/cake/libs/cake_session.php on line 372
ERROR->Unexpected PHP error [Undefined variable: _SESSION] severity [E_NOTICE] in [/var/www/program/cake/libs/cake_session.php line 372]
in testGenerateOwnerWithdrawals
in BalanceTestCase
in /var/www/program/app/tests/cases/models/owners_equity.test.php
ERROR->Unexpected PHP error [Undefined variable: _SESSION] severity [E_NOTICE] in [/var/www/program/cake/libs/cake_session.php line 372]
in testGenerateOwnerWithdrawals
in BalanceTestCase
in /var/www/program/app/tests/cases/models/owners_equity.test.php
المحلول 2
تبين أن هناك بعض التعليمات البرمجية الإضافية في AppModel التي كانت تفسد الأمور:
في beforeFind
و afterFind
:
App::Import("Session");
$session = new CakeSession();
$sim_id = $session->read("Simulation.id");
لا أعرف لماذا, ، ولكن هذا هو ما كانت المشكلة.أدت إزالة هذه الخطوط إلى حل المشكلة التي كنت أواجهها.
نصائح أخرى
يجب عليك التأكد من بدء الجلسة في الجزء العلوي من كل ملف PHP حيث تريد استخدام ملف $_SESSION
superglobal.مثله:
<?php
session_start();
echo $_SESSION['youritem'];
?>
لقد نسيت مساعد الجلسة.
تحقق من هذا الرابط: book.cakephp.org/2.0/en/core-libraries/helpers/session.html