将数组结构设置为Golang中的会话(session)。

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

Set array struct to session in golang

问题

我使用的是github.com/ipfans/echo-session库。当设置数组结构时,我可以保存会话。

这是我的代码:

保存会话

  1. type StaffInfor struct {
  2. Login_id string
  3. Family_name_cc string
  4. First_name_cc string
  5. Family_name_kana string
  6. First_name_kana string
  7. Role_id int
  8. Password string
  9. Message_invalid []string
  10. }
  11. session := session.Default(c)
  12. session.Set("test", listStaffInfor) // listStaffInfor是StaffInfor数组结构
  13. session.Save()

从会话中获取

  1. session := session.Default(c)
  2. fmt.Println(session.Get("test"))

控制台结果显示为空。

英文:

I use lib github.com/ipfans/echo-session. I can save session when set array struct

This my code:

Save session

  1. type StaffInfor struct {
  2. Login_id string
  3. Family_name_cc string
  4. First_name_cc string
  5. Family_name_kana string
  6. First_name_kana string
  7. Role_id int
  8. Password string
  9. Message_invalid []string
  10. }
  11. ~~~
  12. session := session.Default(c)
  13. session.Set("test", listStaffInfor)// listStaffInfor is array struct StaffInfor
  14. session.Save()

Get from session

  1. session := session.Default(c)
  2. fmt.Println(session.Get("test"))

Console result display empty

答案1

得分: 1

github.com/ipfans/echo-session库在内部使用github.com/gorilla/sessions库。

Gorilla session对象使用encoding/gob包进行序列化。因此,如果要在会话中存储复杂的数据类型,您需要注册您的struct

  1. type StaffInfor struct {
  2. Login_id string
  3. Family_name_cc string
  4. First_name_cc string
  5. Family_name_kana string
  6. First_name_kana string
  7. Role_id int
  8. Password string
  9. Message_invalid []string
  10. }
  11. type ListStaffInfor []StaffInfor
  12. func init() {
  13. gob.Register(&StaffInfor{})
  14. gob.Register(&ListStaffInfor{})
  15. }

注意:如果您正在使用基于cookie的会话,不建议将大型对象存储在会话中,因为可能会超过cookie的大小限制(4KB)。

英文:

Library github.com/ipfans/echo-session is using github.com/gorilla/sessions internally.

Gorilla session object is serialised using the encoding/gob package. So to store a complex datatype within a session you have to register your struct.

  1. type StaffInfor struct {
  2. Login_id string
  3. Family_name_cc string
  4. First_name_cc string
  5. Family_name_kana string
  6. First_name_kana string
  7. Role_id int
  8. Password string
  9. Message_invalid []string
  10. }
  11. type ListStaffInfor []StaffInfor
  12. func init() {
  13. gob.Register(&StaffInfor{})
  14. gob.Register(&ListStaffInfor{})
  15. }

Note: If you're using cookie based session, it is not advised to store large object into session, because you might hit cookie size limitation 4KB.

huangapple
  • 本文由 发表于 2017年6月29日 14:12:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/44817570.html
匿名

发表评论

匿名网友

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

确定