|
@@ -3,19 +3,69 @@ package session
|
|
|
import (
|
|
|
"ddpf/model/dbm"
|
|
|
"github.com/tangs-drm/go-tool/util"
|
|
|
+ "github.com/tangs-drm/go-tool/log"
|
|
|
)
|
|
|
|
|
|
+var ShowLog bool
|
|
|
+
|
|
|
+var Max_Session_Num = 10
|
|
|
+var Valid_Session_Time = 2592000000 // 一个月
|
|
|
+
|
|
|
// CreateSession create user session
|
|
|
// 没有uid最多同时5个地方登陆
|
|
|
func CreateSession(uid string) (*Session, error) {
|
|
|
- sess := &Session{
|
|
|
- Id:"",
|
|
|
+ session := &Session{
|
|
|
+ Id:util.UUID(),
|
|
|
Uid:uid,
|
|
|
- Time:util.
|
|
|
+ Time:util.Now(),
|
|
|
+ LastTime:util.Now(),
|
|
|
}
|
|
|
var sqlString string = "INSERT INTO SESSION(ID,UID,TIME,LASTTIME) VALUE(?,?,?,?);"
|
|
|
stmt, err := dbm.Db().Prepare(sqlString)
|
|
|
if err != nil {
|
|
|
+ log.Error("CreateSession Prepare by session(%v) error ->(%v)", util.S2Json(session), err)
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ defer stmt.Close()
|
|
|
+ _, err = stmt.Exec(session.Id, session.Uid, session.Time, session.LastTime)
|
|
|
+ if err != nil {
|
|
|
+ log.Error("CreateSession Exec by session(%v) error ->(%v)", util.S2Json(session), err)
|
|
|
return nil, err
|
|
|
}
|
|
|
+
|
|
|
+ log.Debug("CreateSession by id(%v), uid(%v), lastTime(%v) success", session.Id, session.Uid, session.LastTime)
|
|
|
+ return session, nil
|
|
|
}
|
|
|
+
|
|
|
+// CheckValidSession 是检查用户的session是否有效
|
|
|
+// 检查的指标有session是否存在,有效的session个数,session的有效时间
|
|
|
+func CheckValidSession(session string) (bool, error) {
|
|
|
+ if len(session) < 1 {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ var sqlString = "SELECT ID, LASTTIME FROM (SELECT ID, LASTTIME FROM SESSION ORDER BY LASTTIME DESC LIMIT ?) WHERE ID = ?;"
|
|
|
+ rows, err := dbm.Db().Query(sqlString, Max_Session_Num, session)
|
|
|
+ if err != nil {
|
|
|
+ log.Error("CheckValidSession Query by session(%v), Max_Session_Num(%v) error ->(%v)", session, Max_Session_Num, err)
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+ defer rows.Close()
|
|
|
+
|
|
|
+ if !rows.Next() {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ var id string
|
|
|
+ var lastTime int64
|
|
|
+ err = rows.Scan(&id, &lastTime)
|
|
|
+ if err != nil {
|
|
|
+ log.Error("CheckValidSession Scan result by session(%v) error ->(%v)", session)
|
|
|
+ return false, err
|
|
|
+ }
|
|
|
+
|
|
|
+ validTime := lastTime + Valid_Session_Time
|
|
|
+ if validTime < util.Now() {
|
|
|
+ return false, nil
|
|
|
+ }
|
|
|
+ return true, nil
|
|
|
+}
|