Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Sesi Gorilla saya tidak berterusan merentasi permintaan dalam aplikasi Go saya?

Mengapakah Sesi Gorilla saya tidak berterusan merentasi permintaan dalam aplikasi Go saya?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 05:19:03696semak imbas

Why are my Gorilla Sessions not persisting across requests in my Go application?

Menyelesaikan masalah Sesi Gorila dalam Go

Penerangan Masalah

Apabila menggunakan sesi Gorilla, pembolehubah sesi tidak dikekalkan merentas permintaan. Apl ini mengarahkan pengguna ke halaman log masuk walaupun log masuk dan storan pembolehubah sesi berjaya.

Penyelesaian

1. Konfigurasi Laluan yang Betul:

Stor sesi tidak boleh diakses daripada laluan lain kerana Path ditetapkan kepada "/loginSession". Tukar kepada "/" untuk menjadikan sesi boleh diakses sepanjang aplikasi.

2. Pengesahan Nilai Sesi:

Jangan bandingkan session.Values["email"] dengan nol. Sebaliknya, taip tegaskan nilai pada rentetan dan semak sama ada ia kosong menggunakan val == "".

3. Pengendalian Ralat:

Pastikan ralat dikendalikan semasa menyimpan sesi menggunakan err := sessionNew.Save(req, res).

4. Pengesahan Sesi dalam SessionHandler:

Sahkan sesi sebelum menyiarkan fail statik dalam SessionHandler. Ubah hala pengguna untuk log masuk jika nilai sesi e-mel tidak ada.

Pembetulan Kod:

Init Fungsi:

<code class="go">func init() {
    store.Options = &sessions.Options{
        Domain:   "localhost",
        Path:     "/",
        MaxAge:   3600 * 8, // 8 hours
        HttpOnly: true,
    }
}</code>

Pengendali Sesi:

<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    if session.Values["email"] == "" {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}</code>

Cadangan Keselamatan:

Selain itu, ia adalah penting untuk menggunakan bcrypt untuk pencincangan kata laluan dan parameterkan pertanyaan SQL untuk mengelakkan potensi kelemahan.

Atas ialah kandungan terperinci Mengapakah Sesi Gorilla saya tidak berterusan merentasi permintaan dalam aplikasi Go saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn