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)
}
}
Існує основна різниця між Requests
і ResponseWriter
, Запит - це те, що браузер надсилатиме
Host: 127.0.0.1:8081
User-Agent: ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*
а відповідь - це те, що обробник надішле, приблизно так:
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>
Коли браузер зробить запит, він буде включати файли cookie для цього домену, оскільки файли cookie зберігаються в домені і до них неможливо отримати доступ з міждоменів, якщо ви встановите файл cookie як HTTP, тоді до нього можна отримати доступ лише веб-сайт, який встановив його через HTTP, а не через JS.
Отже, отримуючи інформацію з файлів cookie, ви можете зробити це за допомогою методу r.Cookie, наприклад
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {
https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75
Але коли ви збираєтеся встановлювати файли cookie, ви повинні це робити методом написання відповідей, запит - це об’єкт лише для читання, на який ми відповідаємо, сприймайте це як текстове повідомлення, яке ви отримуєте від когось, тобто запит, Ви можете отримати його лише те, що ви вводите, це відповідь, тому ви можете ввести файл cookie за адресою
докладніше: https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html