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

goland 学生管理系统session验证实现-LMLPHP

服务器根据客户端输入内容返回加密后cookiekey:values并对客户端进行响应 :

goland 学生管理系统session验证实现-LMLPHP

客服端拿到服务器响应的cookie进行本地浏览器缓存,然后再对服务端进行cookie请求访问:

goland 学生管理系统session验证实现-LMLPHP

01-27 08:48