English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Análise de uso de Cookie no Go

Este artigo exemplifica o uso de Cookie no Go. Compartilho com vocês para referência, conforme a seguir:

O desenvolvimento web não pode evitar o contato com cookies. A biblioteca http do Go também oferece operações relacionadas a cookies.

type Cookie struct {
  Name string
  Value string
  Path string
  Domain string
  Expires time.Time
  RawExpires string
  MaxAge int
  Secure bool
  HttpOnly bool
  Raw string
  Unparsed []string
}

O campo Name é o nome do cookie, o Value é seu valor, e os campos Path e Domain são o escopo de armazenamento do cookie. Expires é o tempo de expiração do cookie, se não for configurado, então é um cookie de sessão, ou seja, o cookie é válido para a sessão do navegador, e é excluído imediatamente após o fechamento do navegador.

Configuração de Cookie

cookie é um conteúdo do header, portanto pode ser configurado usando o método Header da resposta.

func setCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1 := http.Cookie{
        Name: "first_cookie",
        Value: "vanyar",
        HttpOnly: true,
    }
    c2 := http.Cookie{
        Name: "second_cookie",
        Value: "noldor",
        HttpOnly: true,
    }
    w.Header().Set("Set-Cookie", c1.String())
    w.Header().Add("Set-Cookie", c2.String())
}

Aqui também pode ser testada a diferença entre os métodos Set e Add. Claro, como no upload de arquivos, o Go também oferece funções úteis comuns.

http.SetCookie(w, &c1)
http.SetCookie(w, &c2)

O método SetCookie do http também pode configurar cookie, então não importa a ordem de precedência entre Set e Add, claro, o segundo parâmetro é um ponteiro para um objeto Cookie. Após configurar o cookie, a próxima coisa a fazer é ler o cookie.

Ler Cookie

Existem muitos métodos para ler cookie, o cookie está encapsulado no header, claro, pode ser processado pelo método header.

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    h := r.Header["Cookie"]
    fmt.Fprintln(w, h)
}

Além de usar o método Header, também pode usar o método Request:

func getCookieHandler(w http.ResponseWriter, r *http.Request) {
    c1, err := r.Cookie("first_cookie")
    if err != nil{
        fmt.Fprintln(w, "Não foi possível obter cookie")
    }
    cs := r.Cookies()
    fmt.Fprintln(w, c1)
    fmt.Fprintln(w, cs)
}

Ao acessar, você pode notar que r.Cookie retorna o par de valor para a chave específica, enquanto r.Cookies retorna o valor de todos os pares de chave de cookie.

Cookie e Mensagem

O cookie tem muitos usos, geralmente registra algumas informações do cliente, usadas para autenticação de usuário. Agora precisamos usar o cookie para um pequeno recurso---Mensagem. Geralmente, após o envio de uma solicitação web, a resposta retorna dados, também pode ser configurada algumas mensagens para referenciar o usuário.

func setMessageHandler(w http.ResponseWriter, r *http.Request) {
    msg := []byte("Olá Mundo")
    c := http.Cookie{
        Name: "flash",
        Value:base64.URLEncoding.EncodeToString(msg),
    }
    http.SetCookie(w, &c)
}
func getMessageHandler(w http.ResponseWriter, r *http.Request) {
    c, err := r.Cookie("flash")
    if err != nil {
        if err == http.ErrNoCookie {
            fmt.Fprintln(w, "Nenhuma mensagem encontrada")
        }
    } else {}}
        rc := http.Cookie{
            Name: "flash",
            MaxAge: -1,
            Expires:time.Unix(1, 0),
        }
        http.SetCookie(w, &rc)
        val, _ := base64.URLEncoding.DecodeString(c.Value)
        fmt.Fprintln(w, string(val))
    }
}

A função setMessageHandler é simples, cria uma instância de cookie, escreve a mensagem no cookie e retorna ao cliente.

getMessageHandler lê primeiro o cookie com a chave flash, se não encontrar conteúdo, significa que a mensagem não existe, caso contrário, cria outro cookie, define o tempo de expiração aqui igual ao tempo de limpeza do cookie. Em seguida, retorna a mensagem lida para o cliente. Conclui a comunicação de mensagem.

Resumo

Discutimos a aplicação básica de cookies no Go. Atualmente, no desenvolvimento web, as pessoas estão cada vez mais prestando atenção à segurança da rede, portanto, a segurança dos cookies também é um conteúdo que os usuários se preocupam. A encapsulação nativa de cookie do Go é relativamente simples. A comunidade do Go desenvolveu muitos rolos, implementando secure cookie, por exemplo, gorilla/Biblioteca securecookie. Durante o desenvolvimento real, pode-se usar algumas bibliotecas ou pacotes de terceiros para completar as funções.

Espero que o conteúdo deste artigo ajude a todos a programar em Go.

Declaração: O conteúdo deste artigo é de origem na internet, pertencente ao respectivo detentor dos direitos autorais, submetido voluntariamente por usuários da internet e carregado automaticamente. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidades legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Aos descobrir, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar