golang web编程:简单的会话(使用sessions包)

dean_go · · 5590 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

网站不能根据来访的ip来确定来访者的身份,ip加端口号也不行.一般都是通过用户名密码来确定用户身份的,但用户也不能每次访问网页时都手动输入一次用户名和密码啊,这样太累了.
一个最简单的想法就是让浏览器帮我们输入,但是http协议本身没有夹带用户名密码的功能,而且有时我们的需求又不只是用户名和密码这么简单,比如说我们还想在浏览器和网页服务器之间传递用户的id,上次访问网站的时间等,每个网站的要求都不一样,所谓众口难调.
现在的做法是,浏览器允许网页服务器在浏览器里存一小段数据,什么数据都行,你自己的格式自己去解析就好了.具体的做法是,浏览器第一次访问服务器时,服务器应答中就会包含需要浏览器请求的数据,浏览器收到服务器的应答,并把数据保存起来.当浏览器再次访问服务器时,浏览器就在请求里包含这段数据.由于这段数据不是我们的主要业务,只不过是我们进行主业务时的一点小插曲,故称这段数据为cookie,是甜甜圈,小点心,以区别于正餐.
下面我们以一段代码来表示这个过程,为简化,我们只要求保存用户名,整个过程就是:
1.浏览器访问网页,服务器返回请求并要求浏览器保存一个用户名.(这个用户名一般是更早阶段要求用户填写一个form传给服务器的.
2. 浏览器保存这个用户名.
3.浏览器再次访问这个网页,并带上这个用户名.
4.浏览器知道是这个用户访问的,就打印一句hello.

代码在测试的时候要访问两次浏览器,第一次浏览器上没有显示,第二次会显示hello.
代码如下:
www.usr.cc
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1package main
 2 import (
 3     "github.com/gorilla/sessions"
 4     "net/http"
 5     "io"
 6 )                                                                                                                                                  
 7
 8 var store=sessions.NewCookieStore([]byte("something-very-secret"))
 9
10 func pageHandler(w http.ResponseWriter, r *http.Request) {
11     session,_:=store.Get(r,"get_name_session")
12     name,ok:=session.Values["name"].(string)
13     session.Values["name"]="Dean"
14     session.Save(r,w)
15     if ok {
16         io.WriteString(w,"hello, "+string(name));
17     }  
18 }  
19
20
21 func main() {
22     http.HandleFunc("/",pageHandler)
23 }  

扩展阅读


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:dean_go

查看原文:golang web编程:简单的会话(使用sessions包)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5590 次点击  
加入收藏 微博
1 回复  |  直到 2020-08-14 14:56:32
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传