前言:好一段时间没写过博客了,最近比较坎坷,感叹一下。好了,进入主题,源码在最后的链接
功能:
1、实现注册相关,包括用户名(支持中文),密码,验证码。数据库为mysql
2、登录,用session记录登录状态
3、管理,查询用户列表等,json
4、单元测试
实现:
讲一下session的实现原理,session可以通过url和cookie方式实现,推荐cookie方式,是由服务端产生并维护唯一的session id(简称sid),通过setcookie的方式设置在head头部,浏览器解析并存储,下次访问的时候浏览器会携带sid一起发起请求。服务端可以用map来存储,并用list来做垃圾回收。
mysession.go
package other
import (
"container/list"
"crypto/rand"
"encoding/base64"
"errors"
"fmt"
"io"
_ "log"
"net/http"
"net/url"
_ "reflect"
"sync"
"time"
)
type SessionManager struct {
Lock sync.Mutex
Smap map[string]*list.Element
SL *list.List //gc
Cookiename string
Expires int
}
type Session struct {
Key string
Sid string
Expires int
Value interface{}
}
/*
说明:只在start中用,并已经加锁,因此这里不需要,否则会引起死锁
*/
func (sm *SessionManager) get(sid string) (Session, error) {
if element, ok := sm.Smap[sid]; ok {
sm.updateList(sid)
return *(element.Value.(*Session)), nil
}
fmt