diff --git a/zh/06.1.md b/zh/06.1.md index c62901af..16964253 100644 --- a/zh/06.1.md +++ b/zh/06.1.md @@ -103,7 +103,7 @@ session机制本身并不复杂,然而其实现和配置上的灵活性却使 如上文所述,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)。 -通过上面的一些简单介绍我们了解了cookie和session的一些基础知识,知道他们之间的联系和区别,做web开发之前,有必要将一些必要知识了解清楚,才不会在用到时捉襟见肘,或是在调bug时候如无头苍蝇乱转。接下来的几小节我们将详细介绍session相关的知识。 +通过上面的一些简单介绍我们了解了cookie和session的一些基础知识,知道他们之间的联系和区别,做web开发之前,有必要将一些必要知识了解清楚,才不会在用到时捉襟见肘,或是在调bug时如无头苍蝇乱转。接下来的几小节我们将详细介绍session相关的知识。 ## links * [目录]() diff --git a/zh/06.2.md b/zh/06.2.md index 979d56f1..6d255ad8 100644 --- a/zh/06.2.md +++ b/zh/06.2.md @@ -95,10 +95,10 @@ var provides = make(map[string]Provider) // it panics. func Register(name string, provider Provider) { if provider == nil { - panic("session: Register provide is nil") + panic("session: Register provider is nil") } if _, dup := provides[name]; dup { - panic("session: Register called twice for provide " + name) + panic("session: Register called twice for provider " + name) } provides[name] = provider } @@ -111,7 +111,7 @@ Session ID是用来识别访问Web应用的每一个用户,因此必须保证 func (manager *Manager) sessionId() string { b := make([]byte, 32) - if _, err := io.ReadFull(rand.Reader, b); err != nil { + if _, err := rand.Read(b); err != nil { return "" } return base64.URLEncoding.EncodeToString(b) @@ -221,7 +221,7 @@ func (manager *Manager) GC() { 我们可以看到GC充分利用了time包中的定时器功能,当超时`maxLifeTime`之后调用GC函数,这样就可以保证`maxLifeTime`时间内的session都是可用的,类似的方案也可以用于统计在线用户数之类的。 ## 总结 -至此 我们实现了一个用来在Web应用中全局管理Session的SessionManager,定义了用来提供Session存储实现Provider的接口,下一小节,我们将会通过接口定义来实现一些Provider,供大家参考学习。 +至此 我们实现了一个用来在Web应用中全局管理Session的SessionManager,定义了用来提供Session存储实现Provider的接口,下一小节,我们将会通过接口定义来实现一些Provider,供大家参考学习。 ## links * [目录]()