2 回答

TA贡献1874条经验 获得超12个赞
Cookie 用于标识会话或存储会话数据,具体取决于所使用的会话存储。同一浏览器实例中的两个隐身窗口共享相同的 Cookie,因此将共享相同的会话。请尝试以下操作之一:比较不同浏览器实例中的会话(有关如何启动单独的实例,请参阅浏览器命令行帮助),比较隐身和非隐身之间的会话,比较 Edge 和 Chrome 之间的会话。

TA贡献1765条经验 获得超5个赞
会话变量包含多个数据,包括会话开始时间。兴趣 确定会话的结束时间。这意味着会话令牌即使在同一浏览器和某些窗口上也有所不同。因为同一用户不能同时登录多次。但是,所有浏览器仍然都知道这一点。因为它为同一用户携带相同的数据,例如唯一的名称或电子邮件。
sess,_ := session.Get ("session-name", c)用于会话类型。仅当您有多种类型的会话时,才动态设置它。
sess.Values ["email"] = email用于查找谁与用户有关联?这些必须动态确定。它使用唯一值(如电子邮件或 Id)进行设置。可以存储一系列数据来自定义用户体验。例如:姓名、颜色、语言。他们建议不要存储密码。它加密敏感数据。设置前。
这是一个简单的大猩猩会话:
func initSession(c echo.Context, name, email string) {
sess, _ := session.Get("session-name", c) // session_name like: addmin_sess of user_ses or onything.
sess.Options = &sessions.Options{
Path: "/",
MaxAge: 216000, // = 1h,
HttpOnly: true, // no websocket or any protocol else
}
sess.Values["email"] = email // nessessary in this senario
sess.Save(c.Request(), c.Response())
}
func login(c echo.Context) error {
formEmail := c.FormValue("email")
formPass := c.FormValue("password")
email, pass := getUsername(formEmail) // "select email pass from UserTable where email_field == formEmail"
if pass == formPass && email == formEmail {
initSession(c, email) // set session of this uniq user in browser.
return c.Redirect(http.StatusSeeOther, "/") // login success.
}
return c.Render(200, "login.html", "Username or password is wrong")
}
用户在未登录的情况下无法访问<配置文件页>:
func profilePage(c echo.Context) error {
sess, _ := session.Get("session_name", c)
email := sess.Values["email"] // we get email from browser.
if email == nil {
return c.Redirect(http.StatusSeeOther, "/login") // login firs.
}
return c.Render(200, "profile.html", email) // just show email
}
- 2 回答
- 0 关注
- 115 浏览
添加回答
举报