Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
beego
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
beego
Commits
68254416
Commit
68254416
authored
Jan 29, 2014
by
傅小黑
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add comments for session packages, part 2
parent
3f0ec5c0
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
12 deletions
+63
-12
sess_mem.go
session/sess_mem.go
+19
-3
sess_mysql.go
session/sess_mysql.go
+26
-6
sess_redis.go
session/sess_redis.go
+18
-3
No files found.
session/sess_mem.go
View file @
68254416
...
@@ -9,6 +9,8 @@ import (
...
@@ -9,6 +9,8 @@ import (
var
mempder
=
&
MemProvider
{
list
:
list
.
New
(),
sessions
:
make
(
map
[
string
]
*
list
.
Element
)}
var
mempder
=
&
MemProvider
{
list
:
list
.
New
(),
sessions
:
make
(
map
[
string
]
*
list
.
Element
)}
// memory session store.
// it saved sessions in a map in memory.
type
MemSessionStore
struct
{
type
MemSessionStore
struct
{
sid
string
//session id
sid
string
//session id
timeAccessed
time
.
Time
//last access time
timeAccessed
time
.
Time
//last access time
...
@@ -16,6 +18,7 @@ type MemSessionStore struct {
...
@@ -16,6 +18,7 @@ type MemSessionStore struct {
lock
sync
.
RWMutex
lock
sync
.
RWMutex
}
}
// set value to memory session
func
(
st
*
MemSessionStore
)
Set
(
key
,
value
interface
{})
error
{
func
(
st
*
MemSessionStore
)
Set
(
key
,
value
interface
{})
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -23,6 +26,7 @@ func (st *MemSessionStore) Set(key, value interface{}) error {
...
@@ -23,6 +26,7 @@ func (st *MemSessionStore) Set(key, value interface{}) error {
return
nil
return
nil
}
}
// get value from memory session by key
func
(
st
*
MemSessionStore
)
Get
(
key
interface
{})
interface
{}
{
func
(
st
*
MemSessionStore
)
Get
(
key
interface
{})
interface
{}
{
st
.
lock
.
RLock
()
st
.
lock
.
RLock
()
defer
st
.
lock
.
RUnlock
()
defer
st
.
lock
.
RUnlock
()
...
@@ -34,6 +38,7 @@ func (st *MemSessionStore) Get(key interface{}) interface{} {
...
@@ -34,6 +38,7 @@ func (st *MemSessionStore) Get(key interface{}) interface{} {
return
nil
return
nil
}
}
// delete in memory session by key
func
(
st
*
MemSessionStore
)
Delete
(
key
interface
{})
error
{
func
(
st
*
MemSessionStore
)
Delete
(
key
interface
{})
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -41,6 +46,7 @@ func (st *MemSessionStore) Delete(key interface{}) error {
...
@@ -41,6 +46,7 @@ func (st *MemSessionStore) Delete(key interface{}) error {
return
nil
return
nil
}
}
// clear all values in memory session
func
(
st
*
MemSessionStore
)
Flush
()
error
{
func
(
st
*
MemSessionStore
)
Flush
()
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -48,27 +54,31 @@ func (st *MemSessionStore) Flush() error {
...
@@ -48,27 +54,31 @@ func (st *MemSessionStore) Flush() error {
return
nil
return
nil
}
}
// get this id of memory session store
func
(
st
*
MemSessionStore
)
SessionID
()
string
{
func
(
st
*
MemSessionStore
)
SessionID
()
string
{
return
st
.
sid
return
st
.
sid
}
}
// Implement method, no used.
func
(
st
*
MemSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
func
(
st
*
MemSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
}
}
type
MemProvider
struct
{
type
MemProvider
struct
{
lock
sync
.
RWMutex
//
用来锁
lock
sync
.
RWMutex
//
locker
sessions
map
[
string
]
*
list
.
Element
//
用来存储在内存
sessions
map
[
string
]
*
list
.
Element
//
map in memory
list
*
list
.
List
//
用来做
gc
list
*
list
.
List
//
for
gc
maxlifetime
int64
maxlifetime
int64
savePath
string
savePath
string
}
}
// init memory session
func
(
pder
*
MemProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
func
(
pder
*
MemProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
pder
.
maxlifetime
=
maxlifetime
pder
.
maxlifetime
=
maxlifetime
pder
.
savePath
=
savePath
pder
.
savePath
=
savePath
return
nil
return
nil
}
}
// get memory session store by sid
func
(
pder
*
MemProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
func
(
pder
*
MemProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
pder
.
lock
.
RLock
()
pder
.
lock
.
RLock
()
if
element
,
ok
:=
pder
.
sessions
[
sid
];
ok
{
if
element
,
ok
:=
pder
.
sessions
[
sid
];
ok
{
...
@@ -87,6 +97,7 @@ func (pder *MemProvider) SessionRead(sid string) (SessionStore, error) {
...
@@ -87,6 +97,7 @@ func (pder *MemProvider) SessionRead(sid string) (SessionStore, error) {
return
nil
,
nil
return
nil
,
nil
}
}
// check session store exist in memory session by sid
func
(
pder
*
MemProvider
)
SessionExist
(
sid
string
)
bool
{
func
(
pder
*
MemProvider
)
SessionExist
(
sid
string
)
bool
{
pder
.
lock
.
RLock
()
pder
.
lock
.
RLock
()
defer
pder
.
lock
.
RUnlock
()
defer
pder
.
lock
.
RUnlock
()
...
@@ -97,6 +108,7 @@ func (pder *MemProvider) SessionExist(sid string) bool {
...
@@ -97,6 +108,7 @@ func (pder *MemProvider) SessionExist(sid string) bool {
}
}
}
}
// generate new sid for session store in memory session
func
(
pder
*
MemProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
func
(
pder
*
MemProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
pder
.
lock
.
RLock
()
pder
.
lock
.
RLock
()
if
element
,
ok
:=
pder
.
sessions
[
oldsid
];
ok
{
if
element
,
ok
:=
pder
.
sessions
[
oldsid
];
ok
{
...
@@ -120,6 +132,7 @@ func (pder *MemProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
...
@@ -120,6 +132,7 @@ func (pder *MemProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
return
nil
,
nil
return
nil
,
nil
}
}
// delete session store in memory session by id
func
(
pder
*
MemProvider
)
SessionDestroy
(
sid
string
)
error
{
func
(
pder
*
MemProvider
)
SessionDestroy
(
sid
string
)
error
{
pder
.
lock
.
Lock
()
pder
.
lock
.
Lock
()
defer
pder
.
lock
.
Unlock
()
defer
pder
.
lock
.
Unlock
()
...
@@ -131,6 +144,7 @@ func (pder *MemProvider) SessionDestroy(sid string) error {
...
@@ -131,6 +144,7 @@ func (pder *MemProvider) SessionDestroy(sid string) error {
return
nil
return
nil
}
}
// clean expired session stores in memory session
func
(
pder
*
MemProvider
)
SessionGC
()
{
func
(
pder
*
MemProvider
)
SessionGC
()
{
pder
.
lock
.
RLock
()
pder
.
lock
.
RLock
()
for
{
for
{
...
@@ -152,10 +166,12 @@ func (pder *MemProvider) SessionGC() {
...
@@ -152,10 +166,12 @@ func (pder *MemProvider) SessionGC() {
pder
.
lock
.
RUnlock
()
pder
.
lock
.
RUnlock
()
}
}
// get count number of memory session
func
(
pder
*
MemProvider
)
SessionAll
()
int
{
func
(
pder
*
MemProvider
)
SessionAll
()
int
{
return
pder
.
list
.
Len
()
return
pder
.
list
.
Len
()
}
}
// expand time of session store by id in memory session
func
(
pder
*
MemProvider
)
SessionUpdate
(
sid
string
)
error
{
func
(
pder
*
MemProvider
)
SessionUpdate
(
sid
string
)
error
{
pder
.
lock
.
Lock
()
pder
.
lock
.
Lock
()
defer
pder
.
lock
.
Unlock
()
defer
pder
.
lock
.
Unlock
()
...
...
session/sess_mysql.go
View file @
68254416
package
session
package
session
//CREATE TABLE `session` (
// mysql session support need create table as sql:
// `session_key` char(64) NOT NULL,
// CREATE TABLE `session` (
// `session_data` blob,
// `session_key` char(64) NOT NULL,
// `session_expiry` int(11) unsigned NOT NULL,
// session_data` blob,
// PRIMARY KEY (`session_key`)
// `session_expiry` int(11) unsigned NOT NULL,
//) ENGINE=MyISAM DEFAULT CHARSET=utf8;
// PRIMARY KEY (`session_key`)
// ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
import
(
import
(
"database/sql"
"database/sql"
...
@@ -18,6 +19,7 @@ import (
...
@@ -18,6 +19,7 @@ import (
var
mysqlpder
=
&
MysqlProvider
{}
var
mysqlpder
=
&
MysqlProvider
{}
// mysql session store
type
MysqlSessionStore
struct
{
type
MysqlSessionStore
struct
{
c
*
sql
.
DB
c
*
sql
.
DB
sid
string
sid
string
...
@@ -25,6 +27,8 @@ type MysqlSessionStore struct {
...
@@ -25,6 +27,8 @@ type MysqlSessionStore struct {
values
map
[
interface
{}]
interface
{}
values
map
[
interface
{}]
interface
{}
}
}
// set value in mysql session.
// it is temp value in map.
func
(
st
*
MysqlSessionStore
)
Set
(
key
,
value
interface
{})
error
{
func
(
st
*
MysqlSessionStore
)
Set
(
key
,
value
interface
{})
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -32,6 +36,7 @@ func (st *MysqlSessionStore) Set(key, value interface{}) error {
...
@@ -32,6 +36,7 @@ func (st *MysqlSessionStore) Set(key, value interface{}) error {
return
nil
return
nil
}
}
// get value from mysql session
func
(
st
*
MysqlSessionStore
)
Get
(
key
interface
{})
interface
{}
{
func
(
st
*
MysqlSessionStore
)
Get
(
key
interface
{})
interface
{}
{
st
.
lock
.
RLock
()
st
.
lock
.
RLock
()
defer
st
.
lock
.
RUnlock
()
defer
st
.
lock
.
RUnlock
()
...
@@ -43,6 +48,7 @@ func (st *MysqlSessionStore) Get(key interface{}) interface{} {
...
@@ -43,6 +48,7 @@ func (st *MysqlSessionStore) Get(key interface{}) interface{} {
return
nil
return
nil
}
}
// delete value in mysql session
func
(
st
*
MysqlSessionStore
)
Delete
(
key
interface
{})
error
{
func
(
st
*
MysqlSessionStore
)
Delete
(
key
interface
{})
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -50,6 +56,7 @@ func (st *MysqlSessionStore) Delete(key interface{}) error {
...
@@ -50,6 +56,7 @@ func (st *MysqlSessionStore) Delete(key interface{}) error {
return
nil
return
nil
}
}
// clear all values in mysql session
func
(
st
*
MysqlSessionStore
)
Flush
()
error
{
func
(
st
*
MysqlSessionStore
)
Flush
()
error
{
st
.
lock
.
Lock
()
st
.
lock
.
Lock
()
defer
st
.
lock
.
Unlock
()
defer
st
.
lock
.
Unlock
()
...
@@ -57,10 +64,13 @@ func (st *MysqlSessionStore) Flush() error {
...
@@ -57,10 +64,13 @@ func (st *MysqlSessionStore) Flush() error {
return
nil
return
nil
}
}
// get session id of this mysql session store
func
(
st
*
MysqlSessionStore
)
SessionID
()
string
{
func
(
st
*
MysqlSessionStore
)
SessionID
()
string
{
return
st
.
sid
return
st
.
sid
}
}
// save mysql session values to database.
// must call this method to save values to database.
func
(
st
*
MysqlSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
func
(
st
*
MysqlSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
defer
st
.
c
.
Close
()
defer
st
.
c
.
Close
()
b
,
err
:=
encodeGob
(
st
.
values
)
b
,
err
:=
encodeGob
(
st
.
values
)
...
@@ -72,11 +82,13 @@ func (st *MysqlSessionStore) SessionRelease(w http.ResponseWriter) {
...
@@ -72,11 +82,13 @@ func (st *MysqlSessionStore) SessionRelease(w http.ResponseWriter) {
}
}
// mysql session provider
type
MysqlProvider
struct
{
type
MysqlProvider
struct
{
maxlifetime
int64
maxlifetime
int64
savePath
string
savePath
string
}
}
// connect to mysql
func
(
mp
*
MysqlProvider
)
connectInit
()
*
sql
.
DB
{
func
(
mp
*
MysqlProvider
)
connectInit
()
*
sql
.
DB
{
db
,
e
:=
sql
.
Open
(
"mysql"
,
mp
.
savePath
)
db
,
e
:=
sql
.
Open
(
"mysql"
,
mp
.
savePath
)
if
e
!=
nil
{
if
e
!=
nil
{
...
@@ -85,12 +97,15 @@ func (mp *MysqlProvider) connectInit() *sql.DB {
...
@@ -85,12 +97,15 @@ func (mp *MysqlProvider) connectInit() *sql.DB {
return
db
return
db
}
}
// init mysql session.
// savepath is the connection string of mysql.
func
(
mp
*
MysqlProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
func
(
mp
*
MysqlProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
mp
.
maxlifetime
=
maxlifetime
mp
.
maxlifetime
=
maxlifetime
mp
.
savePath
=
savePath
mp
.
savePath
=
savePath
return
nil
return
nil
}
}
// get mysql session by sid
func
(
mp
*
MysqlProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
func
(
mp
*
MysqlProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
row
:=
c
.
QueryRow
(
"select session_data from session where session_key=?"
,
sid
)
row
:=
c
.
QueryRow
(
"select session_data from session where session_key=?"
,
sid
)
...
@@ -113,6 +128,7 @@ func (mp *MysqlProvider) SessionRead(sid string) (SessionStore, error) {
...
@@ -113,6 +128,7 @@ func (mp *MysqlProvider) SessionRead(sid string) (SessionStore, error) {
return
rs
,
nil
return
rs
,
nil
}
}
// check mysql session exist
func
(
mp
*
MysqlProvider
)
SessionExist
(
sid
string
)
bool
{
func
(
mp
*
MysqlProvider
)
SessionExist
(
sid
string
)
bool
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -126,6 +142,7 @@ func (mp *MysqlProvider) SessionExist(sid string) bool {
...
@@ -126,6 +142,7 @@ func (mp *MysqlProvider) SessionExist(sid string) bool {
}
}
}
}
// generate new sid for mysql session
func
(
mp
*
MysqlProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
func
(
mp
*
MysqlProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
row
:=
c
.
QueryRow
(
"select session_data from session where session_key=?"
,
oldsid
)
row
:=
c
.
QueryRow
(
"select session_data from session where session_key=?"
,
oldsid
)
...
@@ -148,6 +165,7 @@ func (mp *MysqlProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
...
@@ -148,6 +165,7 @@ func (mp *MysqlProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
return
rs
,
nil
return
rs
,
nil
}
}
// delete mysql session by sid
func
(
mp
*
MysqlProvider
)
SessionDestroy
(
sid
string
)
error
{
func
(
mp
*
MysqlProvider
)
SessionDestroy
(
sid
string
)
error
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
c
.
Exec
(
"DELETE FROM session where session_key=?"
,
sid
)
c
.
Exec
(
"DELETE FROM session where session_key=?"
,
sid
)
...
@@ -155,6 +173,7 @@ func (mp *MysqlProvider) SessionDestroy(sid string) error {
...
@@ -155,6 +173,7 @@ func (mp *MysqlProvider) SessionDestroy(sid string) error {
return
nil
return
nil
}
}
// delete expired values in mysql session
func
(
mp
*
MysqlProvider
)
SessionGC
()
{
func
(
mp
*
MysqlProvider
)
SessionGC
()
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
c
.
Exec
(
"DELETE from session where session_expiry < ?"
,
time
.
Now
()
.
Unix
()
-
mp
.
maxlifetime
)
c
.
Exec
(
"DELETE from session where session_expiry < ?"
,
time
.
Now
()
.
Unix
()
-
mp
.
maxlifetime
)
...
@@ -162,6 +181,7 @@ func (mp *MysqlProvider) SessionGC() {
...
@@ -162,6 +181,7 @@ func (mp *MysqlProvider) SessionGC() {
return
return
}
}
// count values in mysql session
func
(
mp
*
MysqlProvider
)
SessionAll
()
int
{
func
(
mp
*
MysqlProvider
)
SessionAll
()
int
{
c
:=
mp
.
connectInit
()
c
:=
mp
.
connectInit
()
defer
c
.
Close
()
defer
c
.
Close
()
...
...
session/sess_redis.go
View file @
68254416
...
@@ -11,10 +11,12 @@ import (
...
@@ -11,10 +11,12 @@ import (
var
redispder
=
&
RedisProvider
{}
var
redispder
=
&
RedisProvider
{}
// redis max pool size
var
MAX_POOL_SIZE
=
100
var
MAX_POOL_SIZE
=
100
var
redisPool
chan
redis
.
Conn
var
redisPool
chan
redis
.
Conn
// redis session store
type
RedisSessionStore
struct
{
type
RedisSessionStore
struct
{
p
*
redis
.
Pool
p
*
redis
.
Pool
sid
string
sid
string
...
@@ -23,6 +25,7 @@ type RedisSessionStore struct {
...
@@ -23,6 +25,7 @@ type RedisSessionStore struct {
maxlifetime
int64
maxlifetime
int64
}
}
// set value in redis session
func
(
rs
*
RedisSessionStore
)
Set
(
key
,
value
interface
{})
error
{
func
(
rs
*
RedisSessionStore
)
Set
(
key
,
value
interface
{})
error
{
rs
.
lock
.
Lock
()
rs
.
lock
.
Lock
()
defer
rs
.
lock
.
Unlock
()
defer
rs
.
lock
.
Unlock
()
...
@@ -30,6 +33,7 @@ func (rs *RedisSessionStore) Set(key, value interface{}) error {
...
@@ -30,6 +33,7 @@ func (rs *RedisSessionStore) Set(key, value interface{}) error {
return
nil
return
nil
}
}
// get value in redis session
func
(
rs
*
RedisSessionStore
)
Get
(
key
interface
{})
interface
{}
{
func
(
rs
*
RedisSessionStore
)
Get
(
key
interface
{})
interface
{}
{
rs
.
lock
.
RLock
()
rs
.
lock
.
RLock
()
defer
rs
.
lock
.
RUnlock
()
defer
rs
.
lock
.
RUnlock
()
...
@@ -41,6 +45,7 @@ func (rs *RedisSessionStore) Get(key interface{}) interface{} {
...
@@ -41,6 +45,7 @@ func (rs *RedisSessionStore) Get(key interface{}) interface{} {
return
nil
return
nil
}
}
// delete value in redis session
func
(
rs
*
RedisSessionStore
)
Delete
(
key
interface
{})
error
{
func
(
rs
*
RedisSessionStore
)
Delete
(
key
interface
{})
error
{
rs
.
lock
.
Lock
()
rs
.
lock
.
Lock
()
defer
rs
.
lock
.
Unlock
()
defer
rs
.
lock
.
Unlock
()
...
@@ -48,6 +53,7 @@ func (rs *RedisSessionStore) Delete(key interface{}) error {
...
@@ -48,6 +53,7 @@ func (rs *RedisSessionStore) Delete(key interface{}) error {
return
nil
return
nil
}
}
// clear all values in redis session
func
(
rs
*
RedisSessionStore
)
Flush
()
error
{
func
(
rs
*
RedisSessionStore
)
Flush
()
error
{
rs
.
lock
.
Lock
()
rs
.
lock
.
Lock
()
defer
rs
.
lock
.
Unlock
()
defer
rs
.
lock
.
Unlock
()
...
@@ -55,10 +61,12 @@ func (rs *RedisSessionStore) Flush() error {
...
@@ -55,10 +61,12 @@ func (rs *RedisSessionStore) Flush() error {
return
nil
return
nil
}
}
// get redis session id
func
(
rs
*
RedisSessionStore
)
SessionID
()
string
{
func
(
rs
*
RedisSessionStore
)
SessionID
()
string
{
return
rs
.
sid
return
rs
.
sid
}
}
// save session values to redis
func
(
rs
*
RedisSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
func
(
rs
*
RedisSessionStore
)
SessionRelease
(
w
http
.
ResponseWriter
)
{
c
:=
rs
.
p
.
Get
()
c
:=
rs
.
p
.
Get
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -77,6 +85,7 @@ func (rs *RedisSessionStore) SessionRelease(w http.ResponseWriter) {
...
@@ -77,6 +85,7 @@ func (rs *RedisSessionStore) SessionRelease(w http.ResponseWriter) {
c
.
Do
(
"SET"
,
rs
.
sid
,
string
(
b
),
"EX"
,
rs
.
maxlifetime
)
c
.
Do
(
"SET"
,
rs
.
sid
,
string
(
b
),
"EX"
,
rs
.
maxlifetime
)
}
}
// redis session provider
type
RedisProvider
struct
{
type
RedisProvider
struct
{
maxlifetime
int64
maxlifetime
int64
savePath
string
savePath
string
...
@@ -85,8 +94,9 @@ type RedisProvider struct {
...
@@ -85,8 +94,9 @@ type RedisProvider struct {
poollist
*
redis
.
Pool
poollist
*
redis
.
Pool
}
}
//savepath like redisserveraddr,poolsize,password
// init redis session
//127.0.0.1:6379,100,astaxie
// savepath like redis server addr,pool size,password
// e.g. 127.0.0.1:6379,100,astaxie
func
(
rp
*
RedisProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
func
(
rp
*
RedisProvider
)
SessionInit
(
maxlifetime
int64
,
savePath
string
)
error
{
rp
.
maxlifetime
=
maxlifetime
rp
.
maxlifetime
=
maxlifetime
configs
:=
strings
.
Split
(
savePath
,
","
)
configs
:=
strings
.
Split
(
savePath
,
","
)
...
@@ -122,6 +132,7 @@ func (rp *RedisProvider) SessionInit(maxlifetime int64, savePath string) error {
...
@@ -122,6 +132,7 @@ func (rp *RedisProvider) SessionInit(maxlifetime int64, savePath string) error {
return
nil
return
nil
}
}
// read redis session by sid
func
(
rp
*
RedisProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
func
(
rp
*
RedisProvider
)
SessionRead
(
sid
string
)
(
SessionStore
,
error
)
{
c
:=
rp
.
poollist
.
Get
()
c
:=
rp
.
poollist
.
Get
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -141,6 +152,7 @@ func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) {
...
@@ -141,6 +152,7 @@ func (rp *RedisProvider) SessionRead(sid string) (SessionStore, error) {
return
rs
,
nil
return
rs
,
nil
}
}
// check redis session exist by sid
func
(
rp
*
RedisProvider
)
SessionExist
(
sid
string
)
bool
{
func
(
rp
*
RedisProvider
)
SessionExist
(
sid
string
)
bool
{
c
:=
rp
.
poollist
.
Get
()
c
:=
rp
.
poollist
.
Get
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -152,6 +164,7 @@ func (rp *RedisProvider) SessionExist(sid string) bool {
...
@@ -152,6 +164,7 @@ func (rp *RedisProvider) SessionExist(sid string) bool {
}
}
}
}
// generate new sid for redis session
func
(
rp
*
RedisProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
func
(
rp
*
RedisProvider
)
SessionRegenerate
(
oldsid
,
sid
string
)
(
SessionStore
,
error
)
{
c
:=
rp
.
poollist
.
Get
()
c
:=
rp
.
poollist
.
Get
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -181,6 +194,7 @@ func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
...
@@ -181,6 +194,7 @@ func (rp *RedisProvider) SessionRegenerate(oldsid, sid string) (SessionStore, er
return
rs
,
nil
return
rs
,
nil
}
}
// delete redis session by id
func
(
rp
*
RedisProvider
)
SessionDestroy
(
sid
string
)
error
{
func
(
rp
*
RedisProvider
)
SessionDestroy
(
sid
string
)
error
{
c
:=
rp
.
poollist
.
Get
()
c
:=
rp
.
poollist
.
Get
()
defer
c
.
Close
()
defer
c
.
Close
()
...
@@ -189,11 +203,12 @@ func (rp *RedisProvider) SessionDestroy(sid string) error {
...
@@ -189,11 +203,12 @@ func (rp *RedisProvider) SessionDestroy(sid string) error {
return
nil
return
nil
}
}
// Impelment method, no used.
func
(
rp
*
RedisProvider
)
SessionGC
()
{
func
(
rp
*
RedisProvider
)
SessionGC
()
{
return
return
}
}
//@todo
//
@todo
func
(
rp
*
RedisProvider
)
SessionAll
()
int
{
func
(
rp
*
RedisProvider
)
SessionAll
()
int
{
return
0
return
0
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment