我使用 golang web 框架作为我的 web 框架。但是会话不使用。我写的代码如下:package controllers import ( "fmt" "net/http" "strconv" "GoRBAC/app/base" "GoRBAC/app/models" r "github.com/revel/revel")type App struct { *r.Controller}// 首页func (this App) Index() r.Result { userDao := models.NewUserDao() user, err := userDao.QueryById(1) if err != nil { fmt.Println(err) } fmt.Println(user) return this.Render()}// 跳转至登录页面func (this App) ToLogin() r.Result { return this.RenderTemplate("App/login.html")}func (this App) Login() r.Result { username := this.Params.Get("username") password := this.Params.Get("password") securityCode := this.Params.Get("securityCode") fmt.Println(this.Session["securityCode"]) fmt.Println(username) fmt.Println(password) fmt.Println(securityCode) if securityCode != this.Session["securityCode"] { return this.RenderText("error securityCode") } else { userDao := models.NewUserDao() user, err := userDao.QueryByUsername(username) if err != nil || user == nil { return this.RenderText("username not exsit") } else if user.Password != password { return this.RenderText("error password") } else { delete(this.Session, "securityCode") this.RenderText("ok") } } return this.RenderText("ok")}// 获取验证码图片func (this App) GetSecurityCode(timestamp int64) r.Result { // 时间戳参数,第一次加载为1,后续加载为当前的时间戳,可以用来验证客户端刷新频率 // 如:刷新频率过高,直接限制当前客户端等 fmt.Println("GetSecurityCode", timestamp) d := make([]byte, 4) s := base.NewLen(4) ss := "" d = []byte(s) for v := range d { d[v] %= 10 ss += strconv.FormatInt(int64(d[v]), 32) }}我在方法 GetSecurityCode() 中设置了 session 中的 securityCode 值,该方法用于生成登录验证的安全代码我在方法 Login() 中使用了 securityCode 值。但我一无所获谁能帮助我,我该如何解决这个问题?
2 回答
慕村225694
TA贡献1880条经验 获得超4个赞
谢谢正如你所说,我解决了这个问题:
// 获取验证码图片
func (this App) GetSecurityCode(timestamp int64) r.Result {
// 时间戳参数,第一次加载为1,后续加载为当前的时间戳,可以用来验证客户端刷新频率
// 如:刷新频率过高,直接限制当前客户端等
//fmt.Println("GetSecurityCode", timestamp)
d := make([]byte, 4)
s := base.NewLen(4)
ss := ""
d = []byte(s)
for v := range d {
d[v] %= 10
ss += strconv.FormatInt(int64(d[v]), 32)
}
this.Session["securityCode"] = ss
fmt.Println(this.Session["securityCode"])
//this.Response.Status = http.StatusOK
//this.Response.ContentType = "image/png"
buff := &bytes.Buffer{}
base.NewImage(d, 100, 40).WriteTo(buff)
return this.RenderBinary(buff, "img", r.Attachment, time.Now())
}
- 2 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消