English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تحليل استخدام ملفات الكوكيز في لغة Go

يروي هذا المقال مثالاً على استخدام كوكيز بلغة Go. نشاركه معكم للاستفادة منه، ويبدو كما يلي:

تطوير الويب يتطلب حتماً التعامل مع الكوكيز. مكتبة http في Go توفر أيضًا عمليات الكوكيز.

type Cookie struct {
  Name string
  Value string
  Path string
  Domain string
  Expires time.Time
  RawExpires string
  MaxAge int
  Secure bool
  HttpOnly bool
  Raw string
  Unparsed []string
}

حقل الاسم هو اسم الكوكي، القيمة هي قيمته، بينما Path و Domain هما نطاق التخزين للكوكي. Expires هو وقت انتهاء صلاحية الكوكي، إذا لم يتم تعيينه، فإن هذا هو كوكي الجلسة، أي أن الكوكي مفيد أثناء جلسة المتصفح، ويتم حذفه تلقائيًا عند إغلاق المتصفح.

تعيين الكوكي

الكوكي هو جزء من عنوان الرأس، لذا يمكن استخدام طريقة Header للإجابة لتعيين الكوكي.

func setCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1 := http.Cookie{
        الاسم: "first_cookie",
        القيمة: "vanyar",
        HttpOnly: true,
    }
    c2 := http.Cookie{
        الاسم: "second_cookie",
        القيمة: "noldor",
        HttpOnly: true,
    }
    w.Header().Set("Set-Cookie", c1.String())
    w.Header().Add("Set-Cookie", c2.String())
}

يمكن أيضًا اختبار الفرق بين الطريقتين Set و Add هنا. بالطبع، مثل تحميل الملف، يقدم Go أيضًا دوالًا أدوات شائعة.

http.SetCookie(w, &c1)
http.SetCookie(w, &c2)

مетод SetCookie لـ http أيضًا يمكنه تعيين الكوكي، لذا لا يهم ترتيب Set و Add، بالطبع فإن الثانية هي دالة مرجعية لـ Cookie. بعد تعيين الكوكي، يأتي وقت قراءة الكوكي.

قراءة الكوكي

هناك العديد من طرق قراءة الكوكي، حيث تحتوي الكوكي على الـ header، وبالتالي يمكنك معالجتها عن طريق طريقة الـ header.

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    h := r.Header["Cookie"]
    fmt.Fprintln(w, h)
}

لا يمكنك استخدام طريقة الـ Header فقط، يمكنك أيضًا استخدام طريقة الـ Request:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    إذا كان err != nil{
        fmt.Fprintln(w, "لا يمكن الحصول على الكوكي")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

عند زيارتك، يمكنك ملاحظة أن r.Cookie يعود بكفتة القيمة للملف المفتاح، بينما r.Cookies يعود بكفتة القيمة لجميع ملفات المفاتيح للكوكي.

الكوكي والرسالة

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

func setMessageHandler(w http.ResponseWriter, r *http.Request) {
    msg := []byte("مرحبا بالعالم")
    c := http.Cookie{
        Name: "flash",
        قيمة:base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}
func getMessageHandler(w http.ResponseWriter, r *http.Request) {
    c, err := r.Cookie("flash")
    إذا كان err != nil {
        إذا كان err == http.ErrNoCookie {
            fmt.Fprintln(w, "لا يوجد رسالة")
        }
    } else {}}
        rc := http.Cookie{
            Name: "flash",
            MaxAge: -1,
            Expires:time.Unix(1, 0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

func setMessageHandler بسيط للغاية، وهو إنشاء مثيل لـ cookie، ثم كتابة الرسالة إلى cookie، ثم إرجاعها إلى العميل.

getMessageHandler سيقرأ أولاً cookie مفتاحها flash، إذا لم يتم قراءة المحتوى، فإن هذا يعني أن الرسالة غير موجودة، وإلا يتم إنشاء cookie آخر، يتم تعيين وقت انتهاء صلاحيته هنا إلى إزالة cookie. ثم يتم إرجاع الرسالة المقراءة إلى العميل. يتم إكمال اتصال الرسالة.

الخلاصة

نحن نناقش تطبيق cookie الأساسي في Go. في تطوير الويب الحالي، يزداد الاهتمام بالأمان السيبراني، لذا أصبح أمان cookie من القضايا التي يهتم بها المستخدمون. تم تعبئة cookie الأصلية في Go بشكل بسيط. ومع ذلك، قام المجتمع بتطوير العديد من العجلات، وتحقيق cookie الآمن، مثل مكتبة gorilla/securecookie. قد يتم استخدام مكتبات أو حزم ثالثة لإنجاز الوظائف في التطوير العملي.

آمل أن يساعدكم هذا المقال في تصميم برامج Go لغة.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، وملكه حقوق الطبع والنشر ينتمي إلى صاحب الحقوق، تم جمع المحتوى من قبل المستخدمين عبر الإنترنت بطرقهم الخاصة وتم تحميله، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في انتهاك حقوق الطبع والنشر، فنرجو منك إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) لإبلاغنا، وقدم الدليل على الادعاء، وإذا تم التحقق من صحة الادعاء، سيتم حذف المحتوى المزعوم فوراً.

سيكون لك حبك