//ShowAllTasksFunc is used to handle the "/" URL which is the default ons
func ShowAllTasksFunc(w http.ResponseWriter, r *http.Request){
if r.Method == "GET" {
context := db.GetTasks("pending") //true when you want non deleted notes
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)
}
}
C'è una differenza fondamentale tra Requests
e ResponseWriter
, una richiesta è ciò che un browser invierà come
Host: 127.0.0.1:8081
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1:8081/
Cookie: csrftoken=abcd
Connection: keep-alive
e una risposta è ciò che il gestore invierà, qualcosa come:
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>
Quando il browser farà una richiesta, includeremo il cookie per il dominio, dal momento che i cookie vengono memorizzati dominio saggio e non è possibile accedere da domini incrociati, se si imposta un cookie come HTTP solo a quel punto è possibile accedervi solo dal sito Web che lo imposta tramite HTTP e non tramite JS.
Così, quando ottenere informazioni da cookie si può fare dal metodo r.Cookie, come questo
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {
https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75
Ma quando si sta per impostare un cookie, devi farlo nel metodo del writer di risposta, la richiesta è un oggetto di sola lettura a cui rispondiamo, pensiamolo come un messaggio di testo che ricevi da qualcuno, che è una richiesta, puoi solo ottenerlo, ciò che scrivi è una risposta, quindi tu può digitare un cookie al
per ulteriori Dettagli: https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html
Grazie.Sembra funzionare. Ho erroneamente guardato http://golang.org/pkg/net/http/#Request.AddCookie in precedenza – Tech163
Sì, è confuso. Avresti bisogno di Request.AddCookie se il tuo programma go funge da client HTTP e vuoi inviare un valore cookie al server HTTP ... –