아이리스와gorilla/sessions로 세션 관리

13737 단어 Goiris
iris가 있는 세션 관리 라이브러리를 사용하면 잠금과 관련된 문제가 중간에 멈출 것 같아 사용해 본다gorilla/session.
제가 카운터를 만들어 봤어요.방문 up 후 1 상승, 방문/cl 후 삭제.

코드


main.go
package main

import (
    "github.com/kataras/iris"
    "github.com/kataras/iris/context"
    "github.com/gorilla/sessions"
    "fmt"
)

var store = sessions.NewCookieStore([]byte("hoge"))
var sess_name = "sess"

func main() {
    app := iris.New()
    app.Get("/", topPage)
    app.Get("up", upPage)
    app.Get("cl", clearPage)
    app.Run(iris.Addr(":8080"))
}

func topPage (ctx context.Context) {
    f := getFlash(ctx)
    cnt := fmt.Sprintf(
        "<h2>count is %d</h2>",
        getCount(ctx),
    )
    html := `<br><a href="/up">Count Up</a>
    <br><a href="/cl">Count Clear</a>`
    ctx.HTML(f + cnt + html)
}

func upPage (ctx context.Context) {
    countUp(ctx)
    addFlash(ctx, "count up")
    ctx.Redirect("/")
}

func clearPage (ctx context.Context) {
    sessClear(ctx)
    addFlash(ctx,"session clear")
    ctx.Redirect("/")
}
session.go
package main

import (
    "github.com/kataras/iris/context"
    "fmt"
)

func getCount(ctx context.Context) int {
    sess, _ := store.Get(ctx.Request(), sess_name)
    cnt := 0
    if v, ok := sess.Values["cnt"]; ok {
        if c, ok := v.(int); ok {
            cnt = c
        }
    }
    return cnt
}

func countUp(ctx context.Context) {
    sess, _ := store.Get(ctx.Request(), sess_name)
    cnt := 1
    if v, ok := sess.Values["cnt"]; ok {
        if c, ok := v.(int); ok {
            cnt = c + 1
        }
    }
    sess.Values["cnt"] = cnt
    sess.Save(ctx.Request(), ctx.ResponseWriter())
}

func sessClear(ctx context.Context) {
    sess, _ := store.Get(ctx.Request(), sess_name)
    sess.Values = make(map[interface{}]interface{})
    sess.Save(ctx.Request(), ctx.ResponseWriter())
}

func getFlash(ctx context.Context) string {
    sess, _ := store.Get(ctx.Request(), sess_name)
    f := sess.Flashes()
    sess.Save(ctx.Request(), ctx.ResponseWriter())
    if len(f) > 0 {
        return fmt.Sprintf(
            `<p style="color:#090;padding:5px;">%s</p>`,
            f[0],
        )
    }
    return ""
}

func addFlash(ctx context.Context, msg string) {
    sess, _ := store.Get(ctx.Request(), sess_name)
    sess.AddFlash(msg)
    sess.Save(ctx.Request(), ctx.ResponseWriter())
}

스크린


좋은 웹페이지 즐겨찾기