IrisでセッションIDを作成しCookieに追加/除去する方法
開発環境は、Windows 10 Pro(64bit) + go version go1.15.3 windows/amd64。
1.以下のコードをmain.goという名前で保存してください
package main import ( "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/sessions" "net/http" "time" ) var ( cookieNameForSessionID = "mycookiesession" sess = sessions.New(sessions.Config{Cookie: cookieNameForSessionID}) ) func main(){ app := iris.New() tmpl := iris.HTML("./views", ".html") app.RegisterView(tmpl) app.Get("/", func(ctx iris.Context){ if auth, _ := sess.Start(ctx).GetBoolean("authenticated"); !auth { ctx.ViewData("data", "ログインしてません") }else{ ctx.ViewData("data", "ログインしています") } ctx.View("index.html") }) app.Get("/login", login) app.Get("/logout", logout) app.Listen(":8080") } func login(ctx iris.Context){ session := sess.Start(ctx) // HTTP Cookieオプションを変更したい場合は、ここで上書きします。 // NameとValueを同じにすれば上書きできます。 ctx.SetCookie(&http.Cookie{ Name: cookieNameForSessionID, Value: session.ID(), HttpOnly: true, MaxAge: 3600, Path: "/", Domain: "localhost", Expires: time.Now().Add(time.Minute * 3600), SameSite:2, // 2:Lax 3:Strict 4:None }) session.Set("authenticated", true) ctx.ViewData("data", "ログインページ") ctx.View("index.html") } func logout(ctx iris.Context){ session := sess.Start(ctx) session.Set("authenticated", false) session.Delete("authenticated") session.Destroy() // HTTP Cookieを削除する。これがないと、HTTP Cookieがなぜか消えない。 ctx.RemoveCookie(cookieNameForSessionID) ctx.ViewData("data", "ログアウトページ") ctx.View("index.html") }
2. 同じディレクトリにviewsディレクトリを作成し、その中に、以下のコードをindex.htmlという名前で保存してください。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1"> </head> <body> <div> <a href="./">TOP</a> <a href="./login">LOGIN</a> <a href="./logout">LOGOUT</a> </div> <h1>Hello Iris!</h1> <h2>{{ .data }}</h2> </body> </html>
3. go run main.goでサーバーを立ち上げて、localhost:8080にアクセスすると、最初は、ログインしていませんというメッセージが出現しますが、一度、LOGINへアクセスしてから、再び、TOPにアクセスすると、ログインしていますと表示されます。次に、LOGOUTにアクセスしてから、TOPにアクセスすると、また、ログインしていませんと表示されます。
ログイン/ログアウト状態を判別できるんですが、なぜか、ログアウトした後に、Cookieが削除されずに、残ったままなのはなぜなんだろうか?
【追記】
iris.Context.RemoveCookie("HTTP CookieのName")で消去できました。