如何用字符串展开session.Value
Iam使用Gorilla/Sessions 我得到了一个模板页面,用户可以在其中选择不同的设备。 如果他在每个设备下使用一个提交按钮,我的控制器功能应将id值添加到我现有的会话值中如何用字符串展开session.Value,session,go,web,cookies,gorilla,Session,Go,Web,Cookies,Gorilla,Iam使用Gorilla/Sessions 我得到了一个模板页面,用户可以在其中选择不同的设备。 如果他在每个设备下使用一个提交按钮,我的控制器功能应将id值添加到我现有的会话值中 func Cart(w http.ResponseWriter, r *http.Request) { data := CartData{ Name: "Cart", Equipment: model.GetEquipment(model.Db), Pages:
func Cart(w http.ResponseWriter, r *http.Request) {
data := CartData{
Name: "Cart",
Equipment: model.GetEquipment(model.Db),
Pages: []Page{
{
Title: "Meine Geräte",
Active: false,
Link: "/my-equipment",
},
{
Title: "Equipment",
Active: false,
Link: "/equipment",
},
{
Title: "Logout",
Active: false,
Link: "/logout",
},
},
}
equipment,_ := model.GetEquipmentByID(r.FormValue("id"))
session, _ := store.Get(r, "cookie-name")
Strings := strconv.Itoa(equipment.ID)
fmt.Println(Strings)
StringsWithComma := Strings + ","
session.Values["EquipmentIDs"] = session.Values["EquipmentIDs"] + StringsWithComma // THIS CODE LINE DOES NOT WORK, I want to expand "EquipmentIDs" with the new ID
tmpl:= template.Must(template.ParseFiles("template/base_user.html", "template/cart.html"))
tmpl.ExecuteTemplate(w, "base", data)
}
}
示例:用户正在访问我的设备页面。他使用id=2的提交按钮
SessionValue[“EquipmentId”]现在应该为=“2”。
之后,用户再次访问设备页面,并使用id=6的提交按钮。
现在SessionValue应该是=“2,6”
我整天都在关注这个问题,不能再进一步了
如果您有问题或想查看我的代码的其他部分,请随时提问
提前感谢我认为您应该从会话中获取原始设备值,合并用户单击的设备ID,并保存到会话中以备下次请求 我更新您的代码如下:
// ...
equipment, _ := model.GetEquipmentByID(r.FormValue("id"))
session, _ := store.Get(r, "cookie-name")
equipmentIdsStr := strconv.Itoa(equipment.ID)
if original, exist := session.Values["EquipmentIDs"]; exist {
equipmentIdsStr = fmt.Sprintf("%v,%v", original, equipmentIdsStr)
}
session.Values["EquipmentIDs"] = equipmentIdsStr
//You have to save your updated session value
session.Save(r, w)
// ...
希望有帮助。这可能看起来很愚蠢,但是
会话在哪里。保存(r,w)
行?是的,没错。这不是第410行中唯一的faultinvalid操作:original+“,”(接口()和字符串类型不匹配)。(EquipmentIDSSR=original+”,“+EquipmentIDSSR)将其更改为EquipmentIDSSR=original。(字符串)+“,”+EquipmentIDSSR。现在可以了,非常感谢much@ChristopherG1994谢谢我刚刚更新为使用fmt.Sprintf
,以便更好地从接口
转换为字符串
。