//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ó một sự khác biệt cơ bản giữa Requests
và ResponseWriter
, một yêu cầu là những gì một trình duyệt sẽ gửi như
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
và phản hồi là điều mà người xử lý sẽ gửi cho, cái gì đó như:
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>
Khi trình duyệt sẽ gửi một yêu cầu, nó sẽ bao gồm cookie cho tên miền đó, kể từ khi cookie được lưu trữ miền khôn ngoan và không thể được truy cập từ các tên miền chéo, nếu bạn thiết lập một cookie như HTTP chỉ sau đó nó chỉ có thể được truy cập từ trang web mà thiết lập nó thông qua HTTP và không thông qua JS.
Vì vậy, khi nhận được thông tin từ các tập tin cookie bạn có thể làm điều đó từ phương pháp r.Cookie, như
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {
https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75
này Nhưng khi bạn đang đi để thiết lập một cookie, bạn phải làm điều đó trong phương thức người viết phản hồi, yêu cầu là đối tượng chỉ đọc mà chúng tôi trả lời, coi đó là tin nhắn văn bản bạn nhận được từ ai đó, đó là yêu cầu, bạn chỉ có thể nhận được, nội dung bạn nhập là phản hồi, vì vậy bạn có thể nhập cookie vào
để biết thêm chi tiết: https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html
Cảm ơn.Điều đó dường như hoạt động. Tôi đã nhầm lẫn khi nhìn vào http://golang.org/pkg/net/http/#Request.AddCookie trước đó – Tech163
Yeah nó khó hiểu. Bạn sẽ cần Request.AddCookie nếu chương trình đi của bạn hoạt động như một máy khách HTTP và bạn muốn gửi một giá trị cookie đến máy chủ HTTP ... –