鉴权
一 什么是鉴权
在网站中,有些页面是登录后的用户才能访问的,由于http是无状态的协议,我们无法确认用户的状态(如是否登录)。这时候浏览器在访问这些页面时,需要额外传输一些用户的账户信息给后台,让后台知道该用户是否登录、是哪个用户在访问。
二 cookie
cookie是浏览器实现的技术,在浏览器中可以存储用户是否登录的凭证,每次请求都会将该凭证发送给服务器。
cookie实现鉴权步骤:
- 用户登录成功后,后端向浏览器设置一个cookie:username=lisi
- 每次请求,浏览器会自动把该cookie发送给服务端
- 服务端处理请求时,从cookie中取出username,就知道是哪个用户了
- 如果没过期,则鉴权通过,过期了,则重定向到登录页
Go中使用Cookie:
// 登录时设置cookie
expiration := time.Now()
expiration = expiration.AddDate(1, 0, 0)
cookie := http.Cookie{Name: "username", Value: "张三", Expires: expiration}
http.SetCookie(w, &cookie)
// 再次访问时,获取浏览器传递的cookie
// 获取cookie方式一
username, _ := r.Cookie("username")
// 获取cookie方式二
for _, cookie := range r.Cookies() {
fmt.Println(cookie.Username)
}
但是这样做,风险很大,黑客很容易知道cookie中传递的内容,即用户的真实账户信息。