"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا لا يتم الاحتفاظ بمتغيرات جلسات عمل Gorilla عبر الطلبات في تطبيق الويب الخاص بي؟

لماذا لا يتم الاحتفاظ بمتغيرات جلسات عمل Gorilla عبر الطلبات في تطبيق الويب الخاص بي؟

تم النشر بتاريخ 2024-11-12
تصفح:988

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

لا يتم الاحتفاظ بمتغيرات الجلسة في جلسات Gorilla أثناء استخدامها

المشكلة

أثناء استخدام مجموعة أدوات الويب لجلسات Gorilla، لا يتم الاحتفاظ بمتغيرات الجلسة عبر الطلبات. عند تشغيل الخادم وزيارة المستخدمين localhost:8100/، يتم توجيههم إلى login.html لأن قيم الجلسة غير موجودة. عند تسجيل الدخول، يتم تخزين متغيرات الجلسة، ويتم إعادة توجيه المستخدمين إلى home.html. ومع ذلك، فإن فتح علامة تبويب جديدة وإدخال المضيف المحلي:8100/ يوجه المستخدمين إلى تسجيل الدخول.html بدلاً من home.html كما هو متوقع، على الرغم من وجود متغيرات الجلسة.

شرح

تنشأ العديد من المشكلات في الكود المقدم:

  1. مسار الجلسة: يتم تعريف مسار الجلسة على أنه /loginSession. يؤدي هذا إلى تقييد صلاحية ملفات تعريف الارتباط للجلسة على هذا المسار المحدد. لكي تعمل الجلسة عبر مسارات مختلفة (مثل المضيف المحلي:8100/home)، يجب عليك تعيين مسار الجلسة إلى /.
  2. أخطاء بناء الجملة: جلسة الشرط. القيم["email "] == لا شيء غير صحيح. بدلاً من ذلك، يجب استخدام تأكيد النوع للتحقق مما إذا كانت قيمة الجلسة عبارة عن سلسلة: if val, ok := session.Values["email"].(string); ok { // تحقق مما إذا كانت القيمة عبارة عن سلسلة }.
  3. معالجة الأخطاء: لم يتم التحقق من عملية حفظ الجلسة (sessionNew.Save(req, res)) بحثًا عن الأخطاء. أضف معالجة الأخطاء لالتقاط أي مشكلات محتملة ومعالجتها أثناء حفظ الجلسة.
  4. معالجة الجلسة في SessionHandler: يجب الحصول على الجلسة والتحقق من صحتها قبل تقديم الملفات الثابتة في طريقة معالج الجلسة بالإضافة إلى ذلك، لا ينبغي تعيين مسار جهاز التوجيه ضمن هذه الوظيفة لأنه لم يتم تحديد نطاقه هنا. بدلاً من ذلك، قم بتعيين مسار جهاز التوجيه في main() واستخدم وظيفة منفصلة تتحقق من وجود جلسة صالحة قبل التعامل مع طلبات الملفات الثابتة.

مقتطفات التعليمات البرمجية ذات الصلة (بعد معالجة المشكلات):

// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3