سؤال

لقد قمت بنسخ موقع موجود وجري بنجاح إلى خادم تطوير جديد.

يتم الآن كسر تسجيل الدخول على الخادم الجديد ، وقد تتبعته إلى حقيقة أنه على الرغم من إعادة تسمية ملف تعريف الارتباط للجلسة ...

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 والاستعداد لأسوأ سيناريو ، فهذا عندما يصبح تطبيقك موثوقًا وأقل خطأ.

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