如何做好用户的整个浏览过程的控制
1 .无状态的http协议,所以用户的每一次请求都是无状态的,我们其实无法知道整个web操作中哪些链接和该用户有关
2 .cookie:客户端机制,把用户数据保存在客户端
3 .session机制:把session存在服务端,每个访客都被分配一个唯一的标志。它可以通过url传递,也可以通过cookie传递
session和cookie的区别
1 .cookie:本地保存一下用户的历史记录,包括用户登陆的历史纪录。并在用户下一次访问站点的收将cookie通过http协议发送给服务器,完成验证,或者继续上一步操作
2 .会话式cookie,持久cookie
1 .如果不设置过期时间,则表示这个cookie的生命周期从创建到浏览器关闭为止,只要浏览器关闭。cookie就会消失
2 .如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie的有效期依然存在。存储在硬盘上的cookie可以在不同的浏览器进程间共享.比如两个ie窗口。上面的保存在内存中的cookie,不同浏览器有不同的处理方式
3 .设置cookie
expiration:=time.Now()
expiration=expiration.AddDate(1,0,0)
cookie:=http.Cookie{
Name:"golang",
Value:"7777",
Expires:expiration,
}
http.SetCookie(w,&cookie)
4 .读取cookie
cookie,find:=r.Cookie("golang")
fmt.Println(cookie)
fmt.Println(find)
// 获取单个cookie
for _,cookie :=range r.Cookies(){
fmt.Println(w,cookie.Name)
}
// 获取一堆cookie
5 .cookie是将所有信息都保存在本地。包括登陆信息等
session
1 .sesion是一种服务端机制,服务器使用一种类似于散列表的结构来保存信息
2 .当程序需要为某个客户端请求一条session的时候,服务器首先检查这个客户端的请求是否包含了一个session标识,如果有的话,证明之前创建过。如果没有的话,就创建并返回一个新的session,并生成一个sessionid,并在本次相应中返回给客户端保存
3 .session通过cookie保存sessionid
设置
1 .main.go的时候在init函数里面注册全局的session
globalSessions,_=session.NewManager("memory","gosessionid",3600)
// 第一次是上面的写法,导致这个变成了私有变量,并不是全局变量。导致别的地方取不到
go globalSessions.GC()
//定期清除过期的session