4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Go/Gin】ちゃんとセッションを消すログアウト

Last updated at Posted at 2022-09-06

この記事はGo言語、Ginフレームワークの、とくにgin-contrib sessionのログアウトについて、しっかりセッションを消す方法について書いています。

通説

gin-contrib sessionの扱い方を紹介している記事で、よくログアウト機能をこのように組み立てているものが主流になっています。

func Logout(ctx *gin.Context) {
	session := sessions.Default(ctx)
	session.Clear()
	session.Save()
}

しかし、この方法ではブラウザ側ではセッションが残ったままになってしまいます。
セッションの内容がnilになっているかでセッションチェックを行っている場合はちゃんとログアウトできているような挙動をしますが、ブラウザの開発ツールでcookieのセッションが残っていることが確認できることかと思います。

筆者はこれを悪用したログアウト状態のPOSTを受けました(笑)

解決法

GitHubのissueに解決策がありました。
ログアウト関数を以下の通りに書き換えます。

func Logout(ctx *gin.Context) {
	session := sessions.Default(ctx)
	session.Clear()
    session.Options(sessions.Options{Path: "/", MaxAge: -1})
	session.Save()
}

これで、セッションがちゃんと消えていることがブラウザの開発ツールで確認できるかと思います。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?