لا يمكن تغيير اسم ملف تعريف الارتباط جلسة PHP
-
25-09-2019 - |
سؤال
لقد قمت بنسخ موقع موجود وجري بنجاح إلى خادم تطوير جديد.
يتم الآن كسر تسجيل الدخول على الخادم الجديد ، وقد تتبعته إلى حقيقة أنه على الرغم من إعادة تسمية ملف تعريف الارتباط للجلسة ...
ini_set('session.name', 'DOMAIN1');
... يستمر المتصفح في تخزين ملف تعريف الارتباط Sesssion كـ phpsessid.
عندما أقوم بإزالة السطر أعلاه من التطبيق على الخادم الجديد ، يعمل تسجيل الدخول مرة أخرى. ولكن هذا ليس حلاً جيدًا ، لأن تطبيقًا آخر يستخدم أيضًا phpsessid تحت هذا الاسم.
وأفضل أن أجد سبب السلوك الغريب بدلاً من استخدام الحل البديل. إذا لم أصلحها ، فقد يعضني في مكان آخر.
ربما تكون هذه بالفعل معلومات كافية لشخص ما ليعطيني تلميحًا. إذا لم يكن الأمر كذلك ، فما هي المعلومات التي ستكون مفيدة؟
كان هذا الجهاز خادم Ubuntu 8.04 عاري للغاية ، وقمت بتثبيت Apache2 و MySQL و PHP5 مع الكفاءة. كما قمت بتحديث Lokales و timezone.
المحلول:
لقد استبدلت السطر أعلاه بهذا الرمز من الإجابة المقبولة ...
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
die('Unable to set sesssion scope');
}
... ويعمل تسجيل الدخول الآن على الخادم الجديد.
المحلول
أحيانا ini_set
يلعب ويكون غير قادر على تعيين قيم INI بشكل صحيح ، قد يكون أسفل إلى الأذونات.
أدناه لا يحل المشكلة بالكامل مع ini_set
, ، وإذا كان أي شخص يعرف السبب (الأسباب) لماذا ini_set
لا يعمل على نوع من المضيف ، ثم يرجى المشاركة!
حاول القيام بما يلي:
<?
if(ini_set('session.name', 'DOMAIN1') === false || !session_name('DOMAIN1'))
{
die('Unable to set sesssion scope');
}
phpinfo();
?>
بدلاً من ذلك يمكنك فقط استخدام session_name()
لتعيينه ، ودائمًا ما تنصحك بعدم تشغيل الوظائف ونأمل دائمًا التحقق من عبارة IF والاستعداد لأسوأ سيناريو ، فهذا عندما يصبح تطبيقك موثوقًا وأقل خطأ.