浅谈golang的http cookie用法
什么是Cookie?
HTTP协议是无状态的,也就是说,当客户端加载一个页面或者访问一个接口时,服务器并不知道这个请求与之前的请求之间有关系,而Cookie就是为了解决这个问题的,它可以把一些关键性的信息,如用户的登录状态等,保存在客户端,以便在后续的请求中向服务器传递这些信息。
Cookie有两种类型,分别是session cookie和persistent cookie。它们的区别在于是否有过期时间,session cookie 的生命周期到浏览器关闭为止,而persistent cookie 的生命周期则由 expires 字段来指定。
golang中的http.Cookie
golang中的http包提供了Cookie的相关API,其基本结构如下:
type Cookie struct {
Name string
Value string
Path string
Domain string
Expires time.Time
MaxAge int
Secure bool
HttpOnly bool
SameSite SameSite
Raw string
Unparsed []string
}
我们可以使用http包中的SetCookie和Cookie函数来设置和获取cookie:
func SetCookie(w ResponseWriter, cookie *Cookie)
func (r *Request) Cookie(name string) (*Cookie, error)
下面给出两个示例说明。
示例一:设置Cookie
下面的示例演示如何设置一个Cookie:
package main
import (
"fmt"
"net/http"
)
func setCookie(w http.ResponseWriter, r *http.Request) {
c := http.Cookie{
Name: "username",
Value: "johndoe",
Expires: time.Now().Add(24 * time.Hour),
HttpOnly: true,
}
http.SetCookie(w, &c)
fmt.Fprintln(w, "Cookie set: username=johndoe")
}
func main() {
http.HandleFunc("/set_cookie", setCookie)
http.ListenAndServe(":8080", nil)
}
上面的代码创建了一个名为"username"的Cookie并把它的值设置为"johndoe",同时将其过期时间设为24小时。最后通过http.SetCookie将Cookie写入客户端响应。
使用浏览器访问"http://localhost:8080/set_cookie",在响应头中可以看到设置的Cookie:
Set-Cookie: username=johndoe; Expires=Sat, 23 Oct 2021 10:50:30 GMT; HttpOnly
示例二:获取Cookie
下面的示例演示如何获取一个Cookie:
package main
import (
"fmt"
"net/http"
)
func getCookie(w http.ResponseWriter, r *http.Request) {
c, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Error getting cookie: ", err)
return
}
fmt.Fprintln(w, "Cookie value: ", c.Value)
}
func main() {
http.HandleFunc("/get_cookie", getCookie)
http.ListenAndServe(":8080", nil)
}
上面的代码使用r.Cookie函数获取Cookie,并检查是否出错。如果没出错,就输出Cookie的值。
使用浏览器访问"http://localhost:8080/get_cookie",页面上会显示该Cookie的值:"johndoe"。
注意:示例一和示例二要分别运行,因为它们使用了不同的URL。
总结
本文介绍了golang中http包中Cookie的相关API,包括如何设置、获取Cookie。Cookie相对于session和JWT等身份验证方式,它的存储方式更为简单,但相对来说安全性不如后者,有可能会被伪造。因此,在实际情况下,要根据自己的需求选择最适合的身份验证方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈golang的http cookie用法 - Python技术站