Merge pull request #933 from invzhi/master

Tweak many details
This commit is contained in:
astaxie
2017-12-11 22:13:29 +08:00
committed by GitHub
2 changed files with 5 additions and 5 deletions

View File

@@ -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
* [目录](<preface.md>)

View File

@@ -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
* [目录](<preface.md>)