core.login.go
package core
import (
. "cookie/database"
. "cookie/model"
"fmt"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
)
func Login(ctx *gin.Context) {
ctx.HTML(200, "login.html", nil)
}
func LoginPOST(ctx *gin.Context) {
var AC Account
Name := ctx.PostForm("name")
Pwd := ctx.PostForm("pwd")
DB.Where("name = ? AND pwd = ?", Name, Pwd).Take(&AC)
fmt.Println(AC.Id)
//利用cookie实现会话控制
/*if AC.Id == 0 {
ctx.Redirect(301, "/login")
} else {
//设置cookie属性
ctx.SetCookie("Login", "true", 200, "/", "127.0.0.1", false, true)
//如果存在则跳转至首页
ctx.Redirect(301, "/")
}*/
//利用session实现会话控制
if AC.Id == 0 {
ctx.Redirect(301, "/login")
} else {
// 初始化session对象
session := sessions.Default(ctx)
//设置session
session.Set("user_id", AC.Id)
fmt.Println(AC.Id)
ctx.Redirect(301, "/")
//保存session设置
session.Save()
}
}
core.index.go
package core
import (
. "cookie/database"
. "cookie/model"
"fmt"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"reflect"
)
func Index(ctx *gin.Context) {
//在index页面对登入用户的cookie的键值对进行判断,如果请求的cookie值不对等,则跳转至登入页面,如果匹配则进入登入首页
/* cookie, _ := ctx.Cookie("Login")
if cookie == "true" {
ctx.HTML(200, "xcxc", gin.H{})
} else {
ctx.Redirect(301, "/login")
}*/
//用session做验证
//初始化session
session := sessions.Default(ctx)
//对客户端请求的session
user_id := session.Get("user_id")
fmt.Println(user_id, reflect.TypeOf(user_id))
var Ac Account
DB.Where("id = ? ", user_id).Take(&Ac)
fmt.Println(Ac.Name)
//对请求的session进行判断
if user_id != nil {
ctx.HTML(200, "xcxc", nil)
} else {
ctx.Redirect(301, "/login")
}
}
mian.go
package main
import (
. "cookie/database"
. "cookie/rander"
. "cookie/route"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
)
func main() {
//数据库初始化
DbInit()
//构gin引擎
r := gin.Default()
//加载静态文件
r.Static("/static", "./static")
//初始化session构建cookie存储数据库(必须在路由之前完成session初始化)
store := cookie.NewStore([]byte("yuan"))
//设置session中间件,Mysession:密钥的公钥,store:存储数据库((必须在路由之前完成session初始化)
r.Use(sessions.Sessions("Mysession", store))
//多模块加载,渲染
r.HTMLRender = CreateMyRender()
InitRoute(r)
//运行go引擎
r.Run(":8888")
}
实现功能:
首页输入
账号:root,密码:yuan
服务器根据客户端输入内容返回加密后cookie的key:values并对客户端进行响应 :
客服端拿到服务器响应的cookie进行本地浏览器缓存,然后再对服务端进行cookie请求访问: