Estou tendo um problema ao tentar recuperar um cookie se ele estiver definido e se não quiser atualizá-lo, em seguida, recuperá-lo.
Para começar, tenho uma função que define um cookie:
func IndexHandler(w http.ResponseWriter, r *http.Request) {
...
ck := http.Cookie{
Name: "id",
Value: 5,
MaxAge: 60,
}
}
Então, em outra função, eu verifico se esse cookie existe e se ele (lança um erro), eu o recrio
func CheckUpdateCookie(w http.ResponseWriter, r *http.Request) {
val, err := r.Cookie("id")
if err != nil {
ck := http.Cookie{
Name: "id",
Value: 5,
MaxAge: 60,
}
http.SetCookie(w, &ck)
CheckUpdateCookie(w, r)
}
}
Isso faz com que ele execute um loop infinito e não reconheça que o cookie foi definido novamente, se eu imprimir o erro, recebo http: named cookie not present
mesmo depois de definir o cookie no corpo da função.
A chamada para r.Cookie("id")
lê um cabeçalho "Cookie" na solicitação.
A chamada para http.SetCookie(w, &ck)
adiciona um cabeçalho "Set-Cookie" na resposta. A chamada não modifica a solicitação.
Em vez de chamar a função recursivamente para obter o cookie (o que não funciona pelos motivos mencionados acima), basta usar o cookie que você tem em mãos:
func CheckUpdateCookie(w http.ResponseWriter, r *http.Request) {
val, err := r.Cookie("id")
if err != nil {
val := &http.Cookie{
Name: "id",
Value: 5,
MaxAge: 60,
}
http.SetCookie(w, val)
}
// val is now set to the cookie.
}
É normal definir o caminho como "/" para que o cookie esteja disponível em todos os caminhos:
val := &http.Cookie{
Name: "id",
Value: 5,
MaxAge: 60,
Path: "/",
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras