Cookie
HTTP协议
在http协议的请求头(Request Header)(参考1)中,有一个Cookie
字段。可以在http请求中加入相应的cookie信息。
在http协议的响应头(Response Header)中,有一个Set-Cookie
字段,通过该字段客户端可以保存服务端返回的cookie信息,以便在下次请求的时候携带上cookie
Go语言Cookie结构体
在go语言中的net/http
包中,Cookie的定义如下:
解释一下上面的MaxAge
字段,MaxAge
字段为一个整型:
当大于0时,表示该cookie可以被保存多长时间(以秒为单位),此时浏览器一般会把它保存在本地文件中,浏览器退出后重新登录,此cookie依旧可用;
当MaxAge为0时,该cookie会被浏览器保存在内存中,浏览器没有退出的话,一直可以使用该cookie,但退出后就会不能被使用;
当MaxAge小于0时,表示服务器告诉浏览器立即删除该cookie。
示例
下面以一个go程序(参考2)来模拟cookie:
当访问
/readcookie
路径时,服务器在http协议的response body
中返回浏览器携带的cookie信息;如果浏览器未携带cookie,则返回提示信息当访问
/writecookie
路径时,服务器在http的response header
中的Set-Cookie
字段返回一个cookie,该cookie在浏览器再次访问/readcookie
路径时将被使用当访问
/deletecookie
路径时,服务器将cookie的MaxAge字段设为-1,告诉浏览器立即删除该cookie
服务器代码如下:
接下来我们第一次访问 x.x.x.x:8082/readcookie
,如下没有任何cookie信息
然后我们访问x.x.x.x:8082/writecookie
然后,我们再访问x.x.x.x:8082/readcookie
,此时我们发现这一次浏览器携带保存的cookie
我们可以查看当前请求所携带的cookie信息(右击firefox的导航栏 --》 菜单栏 --》 工具 --》 页面信息 --》 安全 --》 cookie)
关闭浏览器,再次访问x.x.x.x:8082/readcookie
,还是能看到cookie信息,说明浏览器把它保存在本地文件中了
接下来,我们访问x.x.x.x:8082/deletecookie
然后,再访问x.x.x.x:8082/readcookie
,发现cookie已经被浏览器删掉了,所以本次请求没有cookie信息
参考
Last updated
Was this helpful?