1.1利用session實現踢人功能user_controller.go
import (
"github.com/1324204490/tool/tool/transcoding"
"github.com/kataras/iris"
"github.com/kataras/iris/sessions"
"github.com/spf13/cast"
"math/rand"
)
var (
cookieNameForSessionID = "mycookiesessionnameid"
Sess = sessions.New(sessions.Config{Cookie: cookieNameForSessionID})
)
type UserController struct {
Ctx iris.Context\
}
//登入介面
func (c *UserController) PostLogin() string {
//隨機生成一串數字 轉成字串後加密
i := rand.Int()
s := transcoding.StrToMd5(cast.ToString(i))
//key可以是使用者名稱 要確保唯一性,也可以是使用者ID
session.Set("zzy", s)
//將生成的session設定到響應頭裡,驗證的時候需要前端放到請求頭裡
c.Ctx.Header("session", s)
}
1.2利用session實現踢人功能main.go
import (\
"fmt"\
"github.com/iris-contrib/middleware/cors"
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/logger"
"github.com/kataras/iris/mvc"
"session/controllers"
)
func main() {
app := *iris.New()
//跨域請求
crs := cors.New(cors.Options{
AllowedOrigins: []string{"*"}, // allows everything, use that to change the hosts.
AllowCredentials: true,
AllowedHeaders: []string{"*"},
})
//註冊到中介軟體中
app.Use(iris.Gzip, logger.New(), crs, Session)
app.AllowMethods(iris.MethodOptions)
//日誌列印
app.Logger().SetLevel("debug")
mvc.New(app.Party("/user")).Handle(&controllers.UserController{})
app.Run(iris.Addr(":" + "11112"))
}
//驗證session的方法
func Session(Ctx iris.Context) {
//除了登入介面以外,其他介面都需要進行session驗證
if ctx.Path() != "/user/login" {
// 檢查使用者是否已通過身份驗證
s := controllers.Sess.Start(ctx).Get("zzy")
if s == nil {
ctx.StatusCode(512)
return
}
//獲取請求頭裡的session,如果與內建的session一致則通過校驗
e := ctx.Request().Header.Get("zzy")
if s == e == false {
ctx.StatusCode(512)
return
}
}
ctx.Next()
}