go学习 --- web生成token避免重复提交

一、token避免反复提交

package main

import (
	"crypto/md5"
	"fmt"
	"html/template"
	"io"
	"net/http"
	"strconv"
	"time"
)

func login(w http.ResponseWriter, r *http.Request)  {
	//获取请求方法
	fmt.Println("method:",r.Method)
	//判断是否是get请求方法
	if r.Method == "GET" {
		unix := time.Now().Unix()
		hash := md5.New()
		io.WriteString(hash, strconv.FormatInt(unix, 10))
		token := fmt.Sprintf("%x", hash.Sum(nil))
		fmt.Println("token=",token)
		files, err := template.ParseFiles("D:/goproject/src/webDemo/http/form/upload.gtpl")
		if err != nil {
			panic(err)
		}
		files.Execute(w,token)
	} else {
		//请求是登陆数据
		r.ParseForm()
		token := r.Form.Get("token")
		fmt.Println(token)
		if token != "" {
			//验证token合法性
			fmt.Println("token:",token)
		} else {
			//不存在token就报错
			fmt.Println("token错误")
		}
		if len(r.Form["username"]) > 1 {
			fmt.Println("username的长度为:",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")))
	}
}
func main() {
      http.HandleFunc("/login",login)
      http.ListenAndServe(":8080",nil)
}

gtpl文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录界面</title>
</head>
<body>
<form action="http://127.0.0.1:8080/login" method="post">
    用户名:<input type="text" name="username"><br>
    密&nbsp&nbsp&nbsp码:<input type="password" name="password"><br>
    <input type="hidden" name="token" value="{{.}}">
    <input type="submit" value="登陆">
</form>
</body>
</html>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值