Mengapa Pembolehubah Sesi Gorilla Tidak Dikekalkan Merentas Permintaan dalam Aplikasi Web Saya?

Susan Sarandon
Lepaskan: 2024-11-03 02:31:29
asal
199 orang telah melayarinya

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

Pembolehubah Sesi dalam Sesi Gorilla Tidak Diselenggarakan Semasa Menggunakannya

Isu

Semasa menggunakan kit web Sesi Gorilla, pembolehubah sesi tidak dikekalkan merentas permintaan. Apabila pelayan dilancarkan dan pengguna melawat localhost:8100/, mereka diarahkan ke login.html kerana nilai sesi tidak wujud. Selepas log masuk, pembolehubah sesi disimpan dan pengguna dialihkan ke home.html. Walau bagaimanapun, membuka tab baharu dan memasukkan localhost:8100/ mengarahkan pengguna untuk log masuk.html dan bukannya home.html seperti yang dijangkakan, walaupun terdapat pembolehubah sesi.

Penjelasan

Beberapa isu timbul dalam kod yang disediakan:

  1. Laluan Sesi: Laluan sesi ditakrifkan sebagai /loginSession. Ini mengehadkan kesahihan kuki sesi kepada laluan khusus ini. Untuk sesi berfungsi merentasi laluan berbeza (seperti localhost:8100/home), anda harus menetapkan laluan sesi kepada /.
  2. Ralat Sintaks: Sesi syarat.Values["email "] == nil tidak betul. Sebaliknya, jenis penegasan harus digunakan untuk menyemak sama ada nilai sesi ialah rentetan: jika val, ok := session.Values["email"].(string); ok { // Semak sama ada nilai ialah rentetan }.
  3. Pengendalian Ralat: Operasi simpan sesi (sessionNew.Save(req, res)) tidak disemak untuk ralat. Tambah pengendalian ralat untuk menangkap dan mengendalikan sebarang isu yang berpotensi semasa penyimpanan sesi.
  4. Pengendalian Sesi dalam SessionHandler: Sesi harus diperoleh dan disahkan sebelum menyiarkan fail statik dalam Kaedah SessionHandler. Selain itu, laluan penghala tidak boleh ditetapkan dalam fungsi ini kerana ia tidak diliputi di sini. Sebaliknya, tetapkan laluan penghala dalam main() dan gunakan fungsi berasingan yang menyemak sesi yang sah sebelum mengendalikan permintaan fail statik.

Snippet Kod Berkaitan (selepas menangani isu):

<code class="go">// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Pembolehubah Sesi Gorilla Tidak Dikekalkan Merentas Permintaan dalam Aplikasi Web Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan