Pembolehubah sesi tidak dikekalkan merentas permintaan menggunakan sesi gorila
Isu ini boleh timbul apabila menggunakan perisian tengah Gorilla Sessions untuk mengurus pembolehubah sesi. Coretan kod yang disediakan menyerlahkan beberapa faktor yang boleh menjejaskan kegigihan sesi:
1. Konfigurasi Laluan Sesi
Kod menetapkan laluan sesi sebagai "/loginSession". Akibatnya, sesi hanya sah dalam laluan "/loginSession". Untuk memastikan ketersediaan sesi merentas semua laluan, laluan hendaklah ditetapkan kepada "/":
<code class="go">func init() { store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, // 8 hours HttpOnly: true, } }</code>
2. Perbandingan Rentetan Kosong
Kod menyemak sama ada session.Values["email"] == tiada untuk menentukan sama ada nilai itu rentetan kosong. Walau bagaimanapun, membandingkan rentetan kosong dengan nol adalah tidak betul. Sebaliknya, gunakan penegasan jenis untuk menyemak rentetan kosong:
<code class="go">if val, ok := session.Values["email"].(string); ok { if val == "" { // Do something... } }</code>
3. Mengendalikan Ralat
Adalah penting untuk mengendalikan ralat semasa menyimpan sesi:
<code class="go">err := sessionNew.Save(req, res) if err != nil { // Handle the error }</code>
4. Perintah Pengesahan Sesi
Kod menyediakan fail statik sebelum mengesahkan sesi dalam fungsi SessionHandler. Untuk memastikan pengesahan sesi yang betul, sesi perlu disahkan terlebih dahulu:
<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Validate the session here... // Serve static files if the session is valid... }</code>
Atas ialah kandungan terperinci Mengapa Pembolehubah Sesi Saya Tidak Berterusan Merentas Permintaan Menggunakan Sesi Gorilla?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!