func ShowAllTasksFunc(w http.ResponseWriter, r *http.Request){
if r.Method == "GET" {
context := db.GetTasks("pending")
if message != "" {
context.Message = message
}
context.CSRFToken = "abcd"
message = ""
expiration := time.Now().Add(365 * 24 * time.Hour)
cookie := http.Cookie{Name: "csrftoken",Value:"abcd",Expires:expiration}
http.SetCookie(w, &cookie)
homeTemplate.Execute(w, context)
} else {
message = "Method not allowed"
http.Redirect(w, r, "/", http.StatusFound)
}
}
Es gibt einen grundlegenden Unterschied zwischen Requests
und ResponseWriter
, eine Anfrage ist, wie ein Browser sendet
Host: 127.0.0.1:8081
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*
und eine Antwort ist, was der Handler senden wird, so etwas wie:
Content-Type: text/html; charset=utf-8
Date: Tue, 12 Jan 2016 16:43:53 GMT
Set-Cookie: csrftoken=abcd; Expires=Wed, 11 Jan 2017 16:43:53 GMT
Transfer-Encoding: chunked
<html>...</html>
Wenn der Browser eine Anfrage stellt, enthält er das Cookie für diese Domain, da Cookies domänenweise gespeichert werden und nicht domänenübergreifend aufgerufen werden können. Wenn Sie ein Cookie nur als HTTP festlegen, kann nur über das Cookie darauf zugegriffen werden Website, die es über HTTP und nicht über JS eingestellt.
Wenn Sie also Informationen von Cookies erhalten, können Sie dies mit der r.Cookie-Methode wie folgt tun
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {
https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75
Wenn Sie jedoch ein Cookie setzen möchten, müssen Sie dies in der Antwortschreibmethode tun. Die Anfrage ist ein schreibgeschütztes Objekt, auf das wir antworten. Stellen Sie sich das als eine Textnachricht vor, die Sie von jemandem erhalten. Das ist eine Anfrage. Sie können es nur erhalten, was Sie eingeben, ist eine Antwort, also können Sie ein Cookie unter eingeben
Für weitere Informationen: https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html