Sessions: جلسة عبر خادم الويب

تم إنشاؤها على ٢٤ يوليو ٢٠١٦  ·  11تعليقات  ·  مصدر: gorilla/sessions

من الممكن عمل جلسة عبر السيرفر باستخدام الغوريلا / الجلسات؟ افترض أن لدي عدة خوادم لخدمة موقع ويب واحد. إذا قام المستخدم بتسجيل الدخول في خادم واحد ، فأنا أتوقع أنه يقوم أيضًا بتسجيل الدخول في خادم آخر.

question

التعليق الأكثر فائدة

CasperHK هذا ما تحصل عليه افتراضيًا مع ملفات تعريف الارتباط: طالما أن الخوادم كلها جزء من نفس المجال (مثل github.com أو * .github.com) ، فسيتم إرسال ملف تعريف الارتباط بواسطة المتصفح.

بدلاً من ذلك ، تدعم الجلسات أيضًا

ال 11 كومينتر

CasperHK هذا ما تحصل عليه افتراضيًا مع ملفات تعريف الارتباط: طالما أن الخوادم كلها جزء من نفس المجال (مثل github.com أو * .github.com) ، فسيتم إرسال ملف تعريف الارتباط بواسطة المتصفح.

بدلاً من ذلك ، تدعم الجلسات أيضًا

gorilla/session رائعًا لمهمتي. في الواقع ، أريد استخدام Go في مشروع السنة الأخيرة في جامعتي ولدي الآن 12 خادم ubuntu ضمن نفس المجال. سيتم استخدام بعضها كخوادم ويب وسيتم استخدام أحدها كخادم قاعدة بيانات MySQL. لذلك ، أرغب في تنفيذ خدمة جلسة قائمة على MySQL للسماح بمزامنة بيانات الجلسة في جميع خوادم الويب.
في السابق ، حاولت برمجة جلسة الخادم عبر الخادم المستندة إلى MySQL. إذا كان srinathgs/mysqlstore يوفر طريقة أسهل لفعل الشيء نفسه ، فمن الرائع أن أدرس عملي وأبسطه.

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

يوم الأحد ، 24 يوليو 2016 الساعة 10:48 مساءً كتب Casper LI [email protected] :

تبدو الغوريلا / الجلسة رائعة بالنسبة لمهمتي. في الواقع ، أريد استخدام Go on my
مشروع السنة النهائية في جامعتي ولدي الآن 12 خادمًا من خوادم أوبونتو
نفس المجال. سيتم استخدام بعضها كخوادم ويب وسيتم استخدام أحدها
تستخدم كخادم قاعدة بيانات MySQL. لذلك ، أريد تنفيذ ملف
خدمة الجلسة المستندة إلى MySQL للسماح بمزامنة بيانات الجلسة في كل الويب
الخوادم.
في السابق ، حاولت برمجة جلسة الخادم عبر الخادم المستندة إلى MySQL. لو "
github.com/gorilla/sessions "يوفر طريقة أسهل للقيام بالمثل ، فهو كذلك
عظيم بالنسبة لي للدراسة وتبسيط عملي.

-
أنت تتلقى هذا لأنه تم تعيينك.

قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234845955 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AABIcNfC7H8DrZq5NX1Tu7W_Vd1LM5BIks5qZE43gaJpZM4JTizF
.

عذرًا ، أريد أن أسأل ما هو ملف تعريف الارتباط الافتراضي ومفتاح التوقيع؟ CookieStore يعني حزمة gorilla/sessions ؟

نعم فعلا. ألق نظرة على http://www.gorillatoolkit.org/pkg/sessions -

  • something-very-secret هو مفتاح التوقيع
  • sessions.NewCookieStore بإرجاع *CookieStore ، والذي لا يتطلب قاعدة بيانات / حالة مشتركة بين خوادمك.
import (
    "net/http"
    "github.com/gorilla/sessions"
)

var store = sessions.NewCookieStore([]byte("something-very-secret"))

func MyHandler(w http.ResponseWriter, r *http.Request) {
    // Get a session. We're ignoring the error resulted from decoding an
    // existing session: Get() always returns a session, even if empty.
    session, err := store.Get(r, "session-name")
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // Set some session values.
    session.Values["foo"] = "bar"
    session.Values[42] = 43
    // Save it before we write to the response/return from the handler.
    session.Save(r, w)
}

لقد قرأت الرمز. عندما أنظر إلى

var store = sessions.NewCookieStore([]byte("something-very-secret")) 

أتساءل عما إذا كان المتغير store يُستخدم في كل معالجات خلال المشروع. إذا كان الأمر كذلك ، فيبدو أنني بحاجة إلى تغليفها في حزمة أخرى وجعلها مُصدَّرة. هذا لأنني فصلت جميع المعالجات المختلفة في حزم مختلفة وفقًا للصفحة التي يقدمونها ، (على سبيل المثال ، index ، projbrwsr ، codeeditor ) ويتعين على هؤلاء المعالجين الاتصال بـ نفس Store .
image

يُقال إن something-very-secret هو مفتاح سري ولكن ليس لدي أي فكرة عما يجب أن أمرره إلى الوظيفة NewCookieStore() .

أدخل store (Session.Store) كعنصر تبعية في حزمك الأخرى.

يوم الاثنين ، 25 يوليو 2016 ، الساعة 8:57 صباحًا ، كتب Casper LI [email protected] :

لقد قرأت الرمز. عندما أنظر إلى

var store = Session.NewCookieStore ([] byte ("something-very-secret"))

أتساءل عما إذا كان متغير المتجر يستخدم في كل معالجات طوال الوقت
المشروع. إذا كان الأمر كذلك ، فيبدو أنني بحاجة إلى تغليفه في حزمة أخرى و
جعلها يتم تصديرها. هذا لأنني فصلت جميع المعالجات المختلفة في
حزم مختلفة وفقًا للصفحة التي يقدمونها ، (على سبيل المثال ، الفهرس ،
projbrwsr، codeeditor) ويجب على هؤلاء المعالجين الاتصال بنفس المتجر.
[صورة: صورة]
https://cloud.githubusercontent.com/assets/6957401/17107410/a34dcc50-52c1-11e6-92f7-a4227da60244.png

-
أنت تتلقى هذا لأنه تم تعيينك.

قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/gorilla/sessions/issues/87#issuecomment -234996994 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AABIcOHzeq8IabUoj-SZx_B-7er-PJf9ks5qZNzsgaJpZM4JTizF
.

يُقال إن شيئًا شديد السرية هو مفتاح سري ولكن ليس لدي أي فكرة عما يجب أن أنقله إلى الوظيفة NewCookieStore ().

https://godoc.org/github.com/gorilla/sessions#NewCookieStore

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

يأخذ NewCookieStore مفتاح مصادقة / توقيع ومفتاح تشفير (اختياري).

آسف ، أنا جديد تمامًا على Go. هل يمكن أن تشرح المزيد عن Inject store أو تعطيني رابطًا للتوضيح؟ شكرا لك.

CasperHK اطلب من

  • NewProjectBrowser(store sessions.Store, debug bool) (*ProjectBrowser, error) { ... }
  • NewCodeEditor(store sessions.Store) (*CodeEditor, error) { ... }

في main.go

func main() {
    // Create a store, and then pass it (inject it) into your other packages via their constructors
    store  := sessions.NewCookieStore(key)
    ...
    ce, err := package.NewCodeEditor(store)
    ...
    pb, err := package.NewProjectBrowser(store)
    ...
}

إغلاق بسبب عدم النشاط.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات