Golang:检索Gorilla/Sessions Cookie

huangapple go评论126阅读模式
英文:

Golang: Retrieving Gorilla/Sessions Cookie

问题

我正在尝试通过s.Save(r, w)来查找保存到客户端浏览器的cookie值。这样我就可以在调用renderTemplate()之前将cookie值存储到数据库中。是否可以使用gorilla/sessions api来实现这一点?

  1. func login(w http.ResponseWriter, r *http.Request, db *sql.DB, store *sessions.CookieStore, t *template.Template){
  2. if r.Method == "POST" {
  3. r.ParseForm()
  4. username, password, remember := r.FormValue("user[name]"), r.FormValue("user
  5. 输入密码查看隐藏内容
  6. "
    ), r.FormValue("remember_me")
  7. User, err := users.Login(db, username, password, remember, r.RemoteAddr)
  8. if err != nil {
  9. http.Error(w, err.Error(), 500)
  10. return
  11. }
  12. s, _ := store.Get(r, "rp-session") //返回一个新的session
  13. s.Save(r, w)
  14. //fmt.Println(s.Values)
  15. renderTemplate(w, "user_nav_info", t, User)
  16. }
  17. }

以上是要翻译的内容。

英文:

I'm trying to find out the cookie value that is being saved to the clients browser via s.Save(r, w). That way I can store the cookie value in a database before calling renderTemplate(). Is there a way to accomplish this using the gorilla/sessions api?

  1. func login(w http.ResponseWriter, r *http.Request, db *sql.DB, store *sessions.CookieStore, t *template.Template){
  2. if r.Method == "POST" {
  3. r.ParseForm()
  4. username, password, remember := r.FormValue("user[name]"), r.FormValue("user
  5. 输入密码查看隐藏内容
  6. "), r.FormValue("remember_me")
  7. User, err := users.Login(db, username, password, remember, r.RemoteAddr)
  8. if err != nil {
  9. http.Error(w, err.Error(), 500)
  10. return
  11. }
  12. s, _ := store.Get(r, "rp-session") //returns a new session
  13. s.Save(r, w)
  14. //fmt.Println(s.Values)
  15. renderTemplate(w, "user_nav_info", t, User)
  16. }
  17. }

答案1

得分: 0

这是gorilla的sessions API如何保存会话的方式-https://github.com/gorilla/sessions/blob/master/store.go#L104-L109

因此,您可以将以下代码包含在其中,以获取在客户端机器上设置的确切cookie值。

  1. encoded, err := securecookie.EncodeMulti(s.Name(), s.Values, store.Codecs...)
  2. if err != nil {
  3. return err
  4. }
  5. cookieVal := NewCookie(s.Name(), encoded, s.Options)
  6. fmt.Println(cookieVal) // 发送给客户端的cookie值

尽管如此,我不建议您以这种方式保存cookie。gorilla的sessions API应该为您完成这项工作。

英文:

This is how gorilla's sessions api saves the session - https://github.com/gorilla/sessions/blob/master/store.go#L104-L109

So, you can essentially include the below code to get the exact cookie value being set in client's machine.

  1. encoded, err := securecookie.EncodeMulti(s.Name(), s.Values, store.Codecs...)
  2. if err != nil {
  3. return err
  4. }
  5. cookieVal := NewCookie(s.Name(), encoded, s.Options)
  6. fmt.Println(cookieVal) // cookie value that is sent to client

Although, I'd not suggest you to save the cookie that way. gorilla's sessions api is supposed to the job for you.

huangapple
  • 本文由 发表于 2015年8月7日 05:06:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/31865799.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定