diff --git a/zh/04.4.md b/zh/04.4.md
index b598d3a1..8fa82923 100644
--- a/zh/04.4.md
+++ b/zh/04.4.md
@@ -7,42 +7,42 @@
我继续拿4.2小节的例子优化:
```html
- 足球
- 篮球
- 网球
- 用户名:
- 密码:
-
-
+足球
+篮球
+网球
+用户名:
+密码:
+
+
```
我们在模版里面增加了一个隐藏字段`token`,这个值我们通过MD5(时间戳)来获取唯一值,然后我们把这个值存储到服务器端(session来控制,我们将在第六章讲解如何保存),以方便表单提交时比对判定。
```Go
- func login(w http.ResponseWriter, r *http.Request) {
- fmt.Println("method:", r.Method) //获取请求的方法
- if r.Method == "GET" {
- crutime := time.Now().Unix()
- h := md5.New()
- io.WriteString(h, strconv.FormatInt(crutime, 10))
- token := fmt.Sprintf("%x", h.Sum(nil))
+func login(w http.ResponseWriter, r *http.Request) {
+ fmt.Println("method:", r.Method) //获取请求的方法
+ if r.Method == "GET" {
+ crutime := time.Now().Unix()
+ h := md5.New()
+ io.WriteString(h, strconv.FormatInt(crutime, 10))
+ token := fmt.Sprintf("%x", h.Sum(nil))
- t, _ := template.ParseFiles("login.gtpl")
- t.Execute(w, token)
+ t, _ := template.ParseFiles("login.gtpl")
+ t.Execute(w, token)
+ } else {
+ //请求的是登陆数据,那么执行登陆的逻辑判断
+ r.ParseForm()
+ token := r.Form.Get("token")
+ if token != "" {
+ //验证token的合法性
} else {
- //请求的是登陆数据,那么执行登陆的逻辑判断
- r.ParseForm()
- token := r.Form.Get("token")
- if token != "" {
- //验证token的合法性
- } else {
- //不存在token报错
- }
- fmt.Println("username length:", len(r.Form["username"][0]))
- fmt.Println("username:", template.HTMLEscapeString(r.Form.Get("username"))) //输出到服务器端
- fmt.Println("password:", template.HTMLEscapeString(r.Form.Get("password")))
- template.HTMLEscape(w, []byte(r.Form.Get("username"))) //输出到客户端
+ //不存在token报错
}
+ fmt.Println("username length:", len(r.Form["username"][0]))
+ fmt.Println("username:", template.HTMLEscapeString(r.Form.Get("username"))) //输出到服务器端
+ fmt.Println("password:", template.HTMLEscapeString(r.Form.Get("password")))
+ template.HTMLEscape(w, []byte(r.Form.Get("username"))) //输出到客户端
}
+}
```
上面的代码输出到页面的源码如下: