Rumah >pembangunan bahagian belakang >Golang >Mengapa pembolehubah sesi saya tidak dipelihara menggunakan Sesi Gorilla?

Mengapa pembolehubah sesi saya tidak dipelihara menggunakan Sesi Gorilla?

Susan Sarandon
Susan Sarandonasal
2024-11-03 00:22:02567semak imbas

Why are my session variables not being preserved using Gorilla Sessions?

Pembolehubah Sesi Tidak Dipelihara Menggunakan Sesi Gorila

Dalam permintaan anda untuk bantuan dengan pengendalian sesi menggunakan Sesi Gorilla, anda menerangkan isu di mana nilai sesi tidak dikekalkan merentas permintaan .

Satu isu yang berpotensi terletak pada laluan yang anda tetapkan untuk stor sesi. Dengan menetapkan Laluan kepada /loginSession, anda mengehadkan kesahihan sesi kepada laluan khusus itu. Untuk memastikan sesi konsisten merentas semua laluan, anda harus menetapkan Laluan kepada / sebaliknya:

store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8,
    HttpOnly: true,
}

Perkara lain yang perlu dipertimbangkan ialah cara anda menyemak nilai sesi. Daripada menggunakan session.Values["email"] == tiada, anda harus menaip menegaskan nilai pada rentetan untuk mengendalikan nilai kosong dengan betul:

if val, ok := session.Values["email"].(string); ok {
    // if val is a string
    switch val {
        case "":
            http.Redirect(res, req, "html/login.html", http.StatusFound)
        default:
            http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
} else {
    // if val is not a string type
    http.Redirect(res, req, "html/login.html", http.StatusFound)
}

Anda juga harus menyemak ralat semasa menyimpan sesi:

err := sessionNew.Save(req, res)
if err != nil {
    // handle the error case
}

Akhir sekali, pastikan anda mendapat dan mengesahkan sesi sebelum menyampaikan fail statik dalam fungsi SessionHandler:

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

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

Dengan menangani isu ini, anda seharusnya dapat memastikan bahawa pembolehubah sesi dipelihara dengan betul merentas permintaan menggunakan Sesi Gorilla.

Atas ialah kandungan terperinci Mengapa pembolehubah sesi saya tidak dipelihara menggunakan Sesi Gorilla?. 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