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

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

Set array struct to session in golang

问题

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

这是我的代码:

保存会话

type StaffInfor struct {
    Login_id         string
    Family_name_cc   string
    First_name_cc    string
    Family_name_kana string
    First_name_kana  string
    Role_id          int
    Password         string
    Message_invalid  []string
}

session := session.Default(c)
session.Set("test", listStaffInfor) // listStaffInfor是StaffInfor数组结构
session.Save()

从会话中获取

session := session.Default(c)
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

type StaffInfor struct {
	Login_id         string
	Family_name_cc   string
	First_name_cc    string
	Family_name_kana string
	First_name_kana  string
	Role_id		 int
	Password	 string
	Message_invalid  []string
}
~~~
session := session.Default(c)
session.Set("test", listStaffInfor)// listStaffInfor is array struct StaffInfor 
session.Save()

Get from session

session := session.Default(c)
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

type StaffInfor struct {
    Login_id         string
    Family_name_cc   string
    First_name_cc    string
    Family_name_kana string
    First_name_kana  string
    Role_id          int
    Password         string
    Message_invalid  []string
}

type ListStaffInfor []StaffInfor

func init() {
    gob.Register(&StaffInfor{})
    gob.Register(&ListStaffInfor{})
}

注意:如果您正在使用基于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.

type StaffInfor struct {
	Login_id         string
	Family_name_cc   string
	First_name_cc    string
	Family_name_kana string
	First_name_kana  string
	Role_id          int
	Password         string
	Message_invalid  []string
}

type ListStaffInfor []StaffInfor

func init() {
   gob.Register(&StaffInfor{})
   gob.Register(&ListStaffInfor{})
}

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:

确定