我正在使用Go,大猩猩進行會話和路由以及模板鬍子製作簡單的Web應用程序。我遇到了一個問題,涉及IE瀏覽器接受cookie的問題。該問題只發生在Internet Explorer中,否則登錄在Chrome中完美運行。這裏是我的代碼:在Internet Explorer中進行大猩猩會話
func main() {
r := mux.NewRouter()
r.HandleFunc("/performance", Index)
r.HandleFunc("/performance/login", Login)
log.Fatal(http.ListenAndServe(":5901", r))
}
func Index(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "performance")
if session.Values["username"] == nil {
http.Redirect(w, r, "/performance/login", http.StatusSeeOther)
}
dict := session.Values
fmt.Fprintf(w, mustache.RenderFileInLayout("templates/index.html", "templates/basepage.html", dict))
}
func Login(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
results := 0
r.ParseForm()
u := r.FormValue("username")
pass := r.FormValue("password")
p := PassEncrypt(pass)
q := map[string]string{}
rows, err := db.Query("SELECT username, name, title FROM user WHERE (username=$1) AND (password=$2)", u, p)
if err != nil {
log.Fatal(err)
}
for rows.Next() {
var username string
var name string
var title string
if err := rows.Scan(&username, &name, &title); err != nil {
log.Fatal(err)
}
q["username"] = username
q["name"] = name
q["title"] = title
results++
}
if results > 0 {
session, _ := store.Get(r, "performance")
session.Options = &sessions.Options{
MaxAge: 900,
}
session.Values["username"] = q["username"]
session.Values["name"] = q["name"]
session.Values["title"] = q["title"]
session.Save(r, w)
http.Redirect(w, r, "/performance", http.StatusSeeOther)
} else {
http.Redirect(w, r, "/performance/login", http.StatusSeeOther)
}
} else {
fmt.Fprintf(w, mustache.RenderFileInLayout("templates/login.html", "templates/basepage.html", nil))
}
}
當使用IE瀏覽器登錄的用戶被重定向右後衛到登錄頁面,因爲會話值「用戶名」是零,而在Chrome瀏覽器中的用戶名是正確定義和索引頁提供服務。出於某種原因,IE不接受Cookie,但我更改了IE中的所有設置以允許來自任何網站的Cookie。我是否需要更改其中一個cookie選項或向cookie中添加除「MaxAge」以外的其他cookie以接受它?提前致謝。
它會一直很好,如果你想縮短你的代碼,以便它是容易複製。 [我這次爲你做了(或多或少)](http://play.golang.org/p/jvZ5lKqbWE)。 – nemo
對不起,擔心我會發帖太少 - 這是我的第一個SO問題。謝謝你的提示。 – h2ounderthebridge