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
37dff6be
Commit
37dff6be
authored
Dec 27, 2015
by
astaxie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1507 from yydzero/develop
Retrieve session identifier from cookie and query parameters
parents
cdde5bdc
da39082d
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
31 deletions
+33
-31
session.go
session/session.go
+33
-31
No files found.
session/session.go
View file @
37dff6be
...
@@ -133,46 +133,49 @@ func NewManager(provideName, config string) (*Manager, error) {
...
@@ -133,46 +133,49 @@ func NewManager(provideName, config string) (*Manager, error) {
},
nil
},
nil
}
}
// SessionStart Start session. generate or read the session id from http request.
// getSid retrieves session identifier from HTTP Request.
// if session id exists, return SessionStore with this id.
// First try to retrieve id by reading from cookie, session cookie name is configurable,
func
(
manager
*
Manager
)
SessionStart
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
(
session
Store
,
err
error
)
{
// if not exist, then retrieve id from querying parameters.
//
// error is not nil when there is anything wrong.
// sid is empty when need to generate a new session id
// otherwise return an valid session id.
func
(
manager
*
Manager
)
getSid
(
r
*
http
.
Request
)
(
string
,
error
)
{
cookie
,
errs
:=
r
.
Cookie
(
manager
.
config
.
CookieName
)
cookie
,
errs
:=
r
.
Cookie
(
manager
.
config
.
CookieName
)
if
errs
!=
nil
||
cookie
.
Value
==
""
{
if
errs
!=
nil
||
cookie
.
Value
==
""
{
sid
,
errs
:=
manager
.
sessionID
(
r
)
errs
:=
r
.
ParseForm
(
)
if
errs
!=
nil
{
if
errs
!=
nil
{
return
nil
,
errs
return
""
,
errs
}
}
session
,
err
=
manager
.
provider
.
SessionRead
(
sid
)
cookie
=
&
http
.
Cookie
{
sid
:=
r
.
FormValue
(
manager
.
config
.
CookieName
)
Name
:
manager
.
config
.
CookieName
,
return
sid
,
nil
Value
:
url
.
QueryEscape
(
sid
),
Path
:
"/"
,
HttpOnly
:
true
,
Secure
:
manager
.
isSecure
(
r
),
Domain
:
manager
.
config
.
Domain
,
}
}
if
manager
.
config
.
CookieLifeTime
>
0
{
cookie
.
MaxAge
=
manager
.
config
.
CookieLifeTime
// HTTP Request contains cookie for sessionid info.
cookie
.
Expires
=
time
.
Now
()
.
Add
(
time
.
Duration
(
manager
.
config
.
CookieLifeTime
)
*
time
.
Second
)
return
url
.
QueryUnescape
(
cookie
.
Value
)
}
// Start session. generate or read the session id from http request.
// if session id exists, return SessionStore with this id.
func
(
manager
*
Manager
)
SessionStart
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
(
session
SessionStore
,
err
error
)
{
sid
,
errs
:=
manager
.
getSid
(
r
)
if
errs
!=
nil
{
return
nil
,
errs
}
}
if
manager
.
config
.
EnableSetCookie
{
http
.
SetCookie
(
w
,
cookie
)
if
sid
!=
""
&&
manager
.
provider
.
SessionExist
(
sid
)
{
return
manager
.
provider
.
SessionRead
(
sid
)
}
}
r
.
AddCookie
(
cookie
)
}
else
{
// Generate a new session
sid
,
errs
:=
url
.
QueryUnescape
(
cookie
.
Value
)
sid
,
errs
=
manager
.
sessionId
(
r
)
if
errs
!=
nil
{
if
errs
!=
nil
{
return
nil
,
errs
return
nil
,
errs
}
}
if
manager
.
provider
.
SessionExist
(
sid
)
{
session
,
err
=
manager
.
provider
.
SessionRead
(
sid
)
}
else
{
sid
,
err
=
manager
.
sessionID
(
r
)
if
err
!=
nil
{
return
nil
,
err
}
session
,
err
=
manager
.
provider
.
SessionRead
(
sid
)
session
,
err
=
manager
.
provider
.
SessionRead
(
sid
)
cookie
=
&
http
.
Cookie
{
cookie
:
=
&
http
.
Cookie
{
Name
:
manager
.
config
.
CookieName
,
Name
:
manager
.
config
.
CookieName
,
Value
:
url
.
QueryEscape
(
sid
),
Value
:
url
.
QueryEscape
(
sid
),
Path
:
"/"
,
Path
:
"/"
,
...
@@ -188,8 +191,7 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se
...
@@ -188,8 +191,7 @@ func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (se
http
.
SetCookie
(
w
,
cookie
)
http
.
SetCookie
(
w
,
cookie
)
}
}
r
.
AddCookie
(
cookie
)
r
.
AddCookie
(
cookie
)
}
}
return
return
}
}
...
...
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