go网络编程pdf_go语言网络编程之session的实现

网络编程中cookie和session是必不可少的,今天就简单说一下go语言对session的实现。

d68cccdce154c485103c27be344254fb.gif

图片来源于网络

cookie,简而言之就是在本地计算机保存一些用户操作的历史信息(当然包括登录信息),并在用户再次访问该站点时浏览器通过HTTP协议将本地cookie内容发送给服务器,从而完成验证,或继续上一步操作。

session在Web开发环境下,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。有时候Session也用来指这种解决方案的存储结构。

简而言之,cookie是本地的文件,存储一下和服务器相关的内容,session的服务端存储的数据,用来和cookie相互对应,简化用户登录等,因为http都是无状态的,在用户登录后,再访问其他页面时不应该再次登录,所以可以使用cookie和session来解决,我们不可能每一次访问界面都要将用户的账号密码等信息都发送一次,这样不仅是做无用功,而且也很危险。

下面是我用go语言实现的一个简单的session:

package mainimport ( "crypto/rand" "encoding/base64" "errors" "io" "net/http" "net/url" "strconv" "sync" "time")// SessionMgr session managertype SessionMgr struct { cookieName string mLock sync.RWMutex maxLifeTime int64 sessions map[string]*Session}// Sessiontype Session struct { sessionID string lastTime time.Time values map[interface{}]interface{}}// NewSessionMgr create session managerfunc NewSessionMgr(cookieName string, maxLifeTime int64) *SessionMgr { mgr := &SessionMgr{cookieName: cookieName, maxLifeTime: maxLifeTime, sessions: make(map[string]*Session)} go mgr.SessionGC() return mgr}// NewSession create sessionfunc (mgr *SessionMgr) NewSession(w http.ResponseWriter, r *http.Request) string { mgr.mLock.Lock() defer mgr.mLock.Unlock() newSessionID := url.QueryEscape(mgr.NewSessionID()) session := &Session{sessionID: newSessionID, lastTime: time.Now(), values: make(map[interface{}]interface{})} mgr.sessions[newSessionID] = session cookie := http.Cookie{Name: mgr.cookieName, Value: newSessionID, Path: "/
已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页