سؤال

لدي موقع ويب PHP الذي أحتفظ به وأكدت أن هذا يعمل في نقطة واحدة.

لدينا موقع ويب يستخدم نظام تسجيل الدخول الذي يخزن معلومات المستخدم في أ $_SESSION['user'] عامل. الموقع المستخدم لتسجيل الخروج من المستخدم عند النقر فوق /logout.php الذي أزال هذا الجزء من الجلسة بشكل أساسي header() إعادة توجيه إلى الصفحة الرئيسية.

اعتبارا من الآونة الأخيرة ، /logout.php ملف مع session_start() في الأعلى بطريقة ما لا يرى معلومات الجلسة عندما print_r() يستخدم لإخراجها لأغراض تصحيح الأخطاء.

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

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

أيه أفكار؟ أنا متعثر تماما على هذا واحد!

الكود: /logout.php

<?
#session_start() is inside this file
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php');

unset($_SESSION['user']);
header("location: /");
exit();
?>

فحص $_SESSION['user'] هو على مستوى الموقع وأتصل بعناصر مختلفة أدناه عند الحاجة لأشياء مختلفة. قام شخص آخر ببناء هذا الموقع وأحاول تصحيح سبب عدم عمله بشكل مفاجئ.

هل كانت مفيدة؟

المحلول

هل يمكنك الوصول إلى logout.php من نفس الشيء المجال الذي قمت بتعيين الجلسة لتبدأ (أي example.com مقابل www.example.com/logout.php)

أما بالنسبة لتوضيح بيانات الجلسة المحددة ، فمن الأفضل الاتصال session_destroy() ثم قم بإلغاء ضبط ملفات تعريف الارتباط الخاصة بك لقتل الجلسة.

نصائح أخرى

إذا كان المجال/المجال الفرعي هو نفسه بقية الصفحة ، فأنا أقول أن هذا يبدو وكأنه جلسة نموذجية مقابل خطأ الإخراج. تأكد من قيامك بتمكين جميع الأخطاء ، وعرضها ، كما قد تكون قد طبعت الإخراج إلى العميل قبل الاتصال session_start(). هذا سوف يكسر الوظيفة وجعل الجلسات غير متوفرة.

لإصلاح المشكلة (إذا كان الأمر كذلك) ، يجب عليك إزالة كل الإخراج من قبل session_start. حتى الفضاء من قبل <?php سيتم اعتبار الإخراج من قبل Apache (وغيرها). تأكد أيضًا من تعطيل BOM (علامة طلب البايت) في المستند (أي محرر لائق سيتيح لك تغيير هذا ، فقط ابحث عن شيء مثل "مجموعات الملفات الحالية").

تذكر دائمًا أن السطر الأول من رمز PHP الخاص بك يجب أن يكون session_start(); ولا شيء آخر. إذا كان كل ما ستفعله هو إلغاء ضبط متغيرات الجلسة وتدمير الجلسة ، فحاول إزالة require_once($_SERVER['DOCUMENT_ROOT'].'/includes/config.php'); وأضف Session_start () و Session_Destroy () في نهاية ملف logout.php ومعرفة ما إذا كان يعمل.

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