fixed markdown format

This commit is contained in:
yetist
2012-10-28 21:00:50 +08:00
parent c3abc9b6c7
commit 81a61b9ced
59 changed files with 280 additions and 280 deletions

22
6.2.md
View File

@@ -1,7 +1,7 @@
#6.2 Go如何使用session
# 6.2 Go如何使用session
通过上一小节的介绍我们知道session是在服务器端实现的一种用户和服务器之间认证的解决方案目前Go标准包没有为session提供任何支持这小节我们将会自己动手来实现go版本的session管理和创建。
##session创建过程
## session创建过程
session的基本原理是由服务器为每个会话维护一份信息数据客户端和服务端依靠一个全局唯一的标识来访问这份数据以达到交互的目的。当用户访问Web应用时服务端程序会随需要创建session这个过程可以概括为三个步骤
- 生成全局唯一标识符sessionid
@@ -15,10 +15,10 @@ session的基本原理是由服务器为每个会话维护一份信息数据
2. URL重写
所谓URL重写就是在返回给用户的页面里的所有的URL后面追加session标识符这样用户在收到响应之后无论点击响应页面里的哪个链接或提交表单都会自动带上session标识符从而就实现了会话的保持。虽然这种做法比较麻烦但是如果客户端禁用了cookie的话此种方案将会是首选。
##Go实现session管理
## Go实现session管理
通过上面session创建过程的讲解读者应该对session有了一个大体的认识但是具体到动态页面技术里面又是怎么实现session的呢下面我们将结合session的生命周期lifecycle来实现go语言版本的session管理。
###session管理设计
### session管理设计
我们知道session管理涉及到如下几个因素
- 全局session管理器
@@ -29,7 +29,7 @@ session的基本原理是由服务器为每个会话维护一份信息数据
接下来我将讲解一下我关于session管理的整个设计思路以及相应的go代码示例
###Session管理器
### Session管理器
定义一个全局的session管理器
@@ -96,7 +96,7 @@ Go实现整个的流程应该也是这样的在main包中创建一个全部
provides[name] = provide
}
###全局唯一的Session ID
### 全局唯一的Session ID
Session ID是用来识别访问Web应用的每一个用户因此必须保证它是全局唯一的GUID下面代码展示了如何满足这一需求
@@ -108,7 +108,7 @@ Session ID是用来识别访问Web应用的每一个用户因此必须保证
return base64.URLEncoding.EncodeToString(b)
}
###session创建
### session创建
我们需要为每个来访用户分配或获取与他相关连的Session以便后面根据Session信息来验证操作。SessionStart这个函数就是用来检测是否已经有某个Session与当前来访用户发生了关联如果没有则创建之。
func (manager *Manager) SessionStart(w http.ResponseWriter, r *http.Request) (session Session) {
@@ -142,7 +142,7 @@ Session ID是用来识别访问Web应用的每一个用户因此必须保证
}
}
###操作值:设置、读取和删除
### 操作值:设置、读取和删除
SessionStart函数返回的是一个满足Session接口的变量那么我们该如何用他来对session数据进行操作呢
上面的例子中的代码`session.Get("uid")`已经展示了基本的读取数据的操作,现在我们再来看一下详细的操作:
@@ -171,7 +171,7 @@ SessionStart函数返回的是一个满足Session接口的变量那么我们
因为Session有过期的概念所以我们定义了GC操作当访问过期时间满足GC的触发条件后将会引起GC但是当我们进行了任意一个session操作都会对Session实体进行更新都会触发对最后访问时间的修改这样当GC的时候就不会误删除还在使用的Session实体。
###session重置
### session重置
我们知道Web应用中有用户退出这个操作那么当用户退出应用的时候我们需要对该用户的session数据进行销毁操作上面的代码已经演示了如何使用session重置操作下面这个函数就是实现了这个功能
//Destroy sessionid
@@ -190,7 +190,7 @@ SessionStart函数返回的是一个满足Session接口的变量那么我们
}
###session销毁
### session销毁
我们来看一下Session管理器如何来管理销毁,只要我们在Main启动的时候启动
func init() {
@@ -206,7 +206,7 @@ SessionStart函数返回的是一个满足Session接口的变量那么我们
我们可以看到GC充分利用了time包中的定时器功能当超时`maxLifeTime`之后调用GC函数这样就可以保证`maxLifeTime`时间内的session都是可用的类似的方案也可以用于统计在线用户数之类的。
##总结
## 总结
至此 我们实现了一个用来在Web应用中全局管理Session的SessionManager定义了用来提供Session存储实现Provider的接口,下一小节我们将会通过接口定义来实现一些Provider,供大家参考学习。
## links