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.
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!