google - habilitar cookies chrome
Configuración de cookies con net/http (7)
Estoy tratando de establecer las cookies con el paquete net / http de Go. Yo tengo:
package main
import "io"
import "net/http"
import "time"
func indexHandler(w http.ResponseWriter, req *http.Request) {
expire := time.Now().AddDate(0, 0, 1)
cookie := http.Cookie{"test", "tcookie", "/", "www.domain.com", expire, expire.Format(time.UnixDate), 86400, true, true, "test=tcookie", []string{"test=tcookie"}}
req.AddCookie(&cookie)
io.WriteString(w, "Hello world!")
}
func main() {
http.HandleFunc("/", indexHandler)
http.ListenAndServe(":80", nil)
}
Intenté buscar en Google ''Golang'' con ''cookies'', pero no obtuve ningún buen resultado. Si alguien puede señalarme en la dirección correcta, sería muy apreciado.
A continuación se muestra cómo usamos cookies en nuestro producto:
func handleFoo(w http.ResponseWriter, r *http.Request) {
// cookie will get expired after 1 year
expires := time.Now().AddDate(1, 0, 0)
ck := http.Cookie{
Name: "JSESSION_ID",
Domain: "foo.com",
Path: "/",
Expires: expires,
}
// value of cookie
ck.Value = "value of this awesome cookie"
// write the cookie to response
http.SetCookie(w, &ck)
// ...
}
En primer lugar, debe crear Cookie y luego usar la función SetCookie () del paquete http para establecer la cookie.
expire := time.Now().Add(10 * time.Minute)
cookie := http.Cookie{Name: "User", Value: "John", Path: "/", Expires: expire, MaxAge: 90000}
http.SetCookie(w, &cookie)
Este código a continuación te ayuda
cookie1 := &http.Cookie{Name: "sample", Value: "sample", HttpOnly: false}
http.SetCookie(w, cookie1)
No funcionaba para mí en Safari hasta que agregué Path y MaxAge. Tanto las cookies seguras como las normales funcionaron para mí
Compartir para que ayude a alguien que está atrapado como yo por más de 2 días :)
expire := time.Now().Add(20 * time.Minute) // Expires in 20 minutes
cookie := http.Cookie{Name: "username", Value: "nonsecureuser", Path: "/", Expires: expire, MaxAge: 86400}
http.SetCookie(w, &cookie)
cookie = http.Cookie{Name: "secureusername", Value: "secureuser", Path: "/", Expires: expire, MaxAge: 86400, HttpOnly: true, Secure: true}
http.SetCookie(w, &cookie)
No soy un experto de Go, pero creo que estás configurando la cookie en la solicitud, ¿no? Es posible que desee configurarlo en la respuesta. Hay una función setCookie
en net / http. Esto podría ayudar: http://golang.org/pkg/net/http/#SetCookie
func SetCookie(w ResponseWriter, cookie *Cookie)
Puede usar el paquete gorilla para manejar cookies o diría cookies seguras: http://www.gorillatoolkit.org/pkg/securecookie
//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)
}
}
Hay una diferencia básica entre Requests
y ResponseWriter
, una Solicitud es lo que un navegador enviará como
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
y una respuesta es lo que el controlador enviará, algo así como:
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>
Cuando el navegador haga una solicitud, incluirá la cookie para ese dominio, ya que las cookies se almacenan en el dominio y no se puede acceder desde dominios cruzados. Si configura una cookie como HTTP, solo podrá acceder a ella desde el sitio web que lo establece a través de HTTP y no a través de JS.
Entonces, al obtener información de las cookies, puede hacer eso desde el método r.Cookie, como este
cookie, _ := r.Cookie("csrftoken")
if formToken == cookie.Value {
https://github.com/thewhitetulip/Tasks/blob/master/views/addViews.go#L72-L75
Pero cuando va a establecer una cookie, debe hacerlo en el método de escritura de respuesta, la solicitud es un objeto de solo lectura al que respondemos, piense en ello como un mensaje de texto que recibe de alguien, es decir, una solicitud, solo puede obtenerlo, lo que escribe es una respuesta, por lo que puede ingresar una cookie en
para más detalles: https://thewhitetulip.gitbooks.io/webapp-with-golang-anti-textbook/content/content/2.4workingwithform.html