File tree Expand file tree Collapse file tree 2 files changed +5
-5
lines changed Expand file tree Collapse file tree 2 files changed +5
-5
lines changed Original file line number Diff line number Diff line change @@ -103,7 +103,7 @@ session机制本身并不复杂,然而其实现和配置上的灵活性却使
103
103
如上文所述,session和cookie的目的相同,都是为了克服http协议无状态的缺陷,但完成的方法不同。session通过cookie,在客户端保存session id,而将用户的其他会话消息保存在服务端的session对象中,与此相对的,cookie需要将所有信息都保存在客户端。因此cookie存在着一定的安全隐患,例如本地cookie中保存的用户名密码被破译,或cookie被其他网站收集(例如:1. appA主动设置域B cookie,让域B cookie获取;2. XSS,在appA上通过javascript获取document.cookie,并传递给自己的appB)。
104
104
105
105
106
- 通过上面的一些简单介绍我们了解了cookie和session的一些基础知识,知道他们之间的联系和区别,做web开发之前,有必要将一些必要知识了解清楚,才不会在用到时捉襟见肘,或是在调bug时候如无头苍蝇乱转 。接下来的几小节我们将详细介绍session相关的知识。
106
+ 通过上面的一些简单介绍我们了解了cookie和session的一些基础知识,知道他们之间的联系和区别,做web开发之前,有必要将一些必要知识了解清楚,才不会在用到时捉襟见肘,或是在调bug时如无头苍蝇乱转 。接下来的几小节我们将详细介绍session相关的知识。
107
107
108
108
## links
109
109
* [ 目录] ( < preface.md > )
Original file line number Diff line number Diff line change @@ -95,10 +95,10 @@ var provides = make(map[string]Provider)
95
95
// it panics.
96
96
func Register (name string , provider Provider ) {
97
97
if provider == nil {
98
- panic (" session: Register provide is nil" )
98
+ panic (" session: Register provider is nil" )
99
99
}
100
100
if _ , dup := provides[name]; dup {
101
- panic (" session: Register called twice for provide " + name)
101
+ panic (" session: Register called twice for provider " + name)
102
102
}
103
103
provides[name] = provider
104
104
}
@@ -111,7 +111,7 @@ Session ID是用来识别访问Web应用的每一个用户,因此必须保证
111
111
112
112
func (manager *Manager ) sessionId () string {
113
113
b := make ([]byte , 32 )
114
- if _ , err := io. ReadFull ( rand.Reader , b); err != nil {
114
+ if _ , err := rand.Read ( b); err != nil {
115
115
return " "
116
116
}
117
117
return base64.URLEncoding .EncodeToString (b)
@@ -221,7 +221,7 @@ func (manager *Manager) GC() {
221
221
我们可以看到GC充分利用了time包中的定时器功能,当超时` maxLifeTime ` 之后调用GC函数,这样就可以保证` maxLifeTime ` 时间内的session都是可用的,类似的方案也可以用于统计在线用户数之类的。
222
222
223
223
## 总结
224
- 至此 我们实现了一个用来在Web应用中全局管理Session的SessionManager,定义了用来提供Session存储实现Provider的接口, 下一小节,我们将会通过接口定义来实现一些Provider,供大家参考学习。
224
+ 至此 我们实现了一个用来在Web应用中全局管理Session的SessionManager,定义了用来提供Session存储实现Provider的接口, 下一小节,我们将会通过接口定义来实现一些Provider,供大家参考学习。
225
225
226
226
## links
227
227
* [ 目录] ( < preface.md > )
You can’t perform that action at this time.
0 commit comments