ホームページ バックエンド開発 Golang セッション管理と、Gin フレームワークでのそのアプリケーション

セッション管理と、Gin フレームワークでのそのアプリケーション

Jun 22, 2023 pm 12:38 PM
応用 セッション管理 ジンフレーム

Gin フレームワークは、Go 言語を使用して開発された軽量の Web フレームワークであり、効率性、使いやすさ、柔軟性などの利点があります。 Web アプリケーション開発において、セッション管理は非常に重要なトピックであり、ユーザー情報の保存、ユーザー ID の検証、CSRF 攻撃の防止などに使用できます。この記事では、Gin フレームワークにおけるセッション管理メカニズムとその応用について紹介します。

1. セッション管理のメカニズム

Gin フレームワークでは、セッション管理はミドルウェアを通じて実装されます。 Gin フレームワークは、セッション管理に必要な操作をカプセル化するセッション パッケージを提供します。セッション パッケージを使用する前に、まずインストールする必要があります。ターミナルで次のコマンドを入力します:

go get github.com/gin-contrib/sessions
ログイン後にコピー

セッション パッケージは、Cookie、メモリ ストレージ、ファイル ストレージ、および Redis ストレージの 4 つのセッション管理方法を提供します。このうち、メモリ ストレージとファイル ストレージはデフォルトであり、Redis ストレージでは redis-go-driver パッケージをインストールしてコードにインポートする必要があります。以下では、例として Cookie メソッドを使用して、セッション管理の実装を紹介します。

  1. セッション ミドルウェアの作成
package main

import (
    "github.com/gin-contrib/sessions"
    "github.com/gin-contrib/sessions/cookie"
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    // 设置会话中间件
    store := cookie.NewStore([]byte("secret"))
    router.Use(sessions.Sessions("mysession", store))

    router.GET("/set", setHandler)
    router.GET("/get", getHandler)

    router.Run(":8080")
}

func setHandler(c *gin.Context) {
    session := sessions.Default(c)
    session.Set("user", "John")
    session.Save()
    c.String(200, "Session saved.")
}

func getHandler(c *gin.Context) {
    session := sessions.Default(c)
    user := session.Get("user")
    c.String(200, "User is %v.", user)
}
ログイン後にコピー

上記のコードでは、Cookie ストレージ セッション ミドルウェアを作成し、Gin エンジンにバインドします。このうち、最初のパラメータ「mysession」はセッション名を表し、2 番目のパラメータ []byte (「secret」) は Cookie の値を暗号化するために使用されるキーです。 setHandler では、session.Set() メソッドを使用してキーと値のペアを設定し、session.Save() メソッドを呼び出してセッションを保存します。 getHandlerでは、session.Get()メソッドを使用してユーザー情報を取得し、レスポンスに出力します。

  1. テスト セッション管理

ターミナルに次のコマンドを入力してサービスを開始します:

go run main.go
ログイン後にコピー

ブラウザに次のアドレスを入力します:

http://localhost:8080/set
ログイン後にコピー

次に入力します:

http://localhost:8080/get
ログイン後にコピー

応答情報は次のとおりです:

User is John.
ログイン後にコピー

これは、セッションが正常に作成され、ユーザー情報が保存されたことを示しています。

2. セッション管理のアプリケーション

Web アプリケーションでは、セッション管理は通常次のシナリオで使用されます:

  1. ユーザー認証

ユーザー認証は、Web アプリケーションで最も一般的なシナリオの 1 つであり、ユーザーがログインしているかどうか、およびユーザーが特定のリソースにアクセスする権利を持っているかどうかを判断するために使用されます。 Gin フレームワークでは、ユーザー情報をセッションに保存し、認証が必要な場合はいつでもそれを確認できます。以下は簡単なユーザー認証の例です:

func authHandler(c *gin.Context) {
    session := sessions.Default(c)
    user := session.Get("user")
    if user == nil {
        c.Redirect(http.StatusFound, "/login")
        return
    }
    // 验证用户身份
    if user != "admin" {
        c.AbortWithStatus(http.StatusUnauthorized)
        return
    }
    c.String(200, "Hello, admin.")
}
ログイン後にコピー

上記のコードでは、最初に session.Get() メソッドを使用してユーザー情報を取得します。ユーザーがログインしていない場合は、ログイン ページにリダイレクトされます。ユーザーがログインしている場合は、そのユーザーが管理者であることを確認します。管理者であれば「Hello, admin.」が出力され、そうでない場合は401 Unauthorizedが返されます。

  1. CSRF 攻撃の防止

クロスサイト リクエスト フォージェリ (略して CSRF) は、ブラウザの Cookie メカニズムを使用し、攻撃目的を達成するためにリクエストを偽造する一般的な Web 攻撃手法です。 。 Gin フレームワークでは、セッションを使用して CSRF 攻撃を防ぐことができます。具体的には、フォーム送信ごとに csrf_token フィールドをフォームに追加し、そのフィールドをセッションに保存します。後続のリクエストごとに、トークンがセッションに保存されているものと一致しているかどうかを確認できます。簡単な CSRF 防御の例を次に示します。

func csrfHandler(c *gin.Context) {
    session := sessions.Default(c)
    token := session.Get("csrf_token")
    if token == nil || token != c.PostForm("csrf_token") {
        c.AbortWithStatus(http.StatusBadRequest)
        return
    }
    // 处理表单提交
    c.String(200, "Form submitted.")
}

func formHandler(c *gin.Context) {
    session := sessions.Default(c)
    token := uuid.New().String()
    session.Set("csrf_token", token)
    session.Save()
    c.HTML(http.StatusOK, "form.html", gin.H{
        "csrf_token": token,
    })
}
ログイン後にコピー

上記のコードでは、最初にフォーム内の csrf_token 値とセッションに保存されているトークン値を比較します。それらが矛盾している場合は、400 Bad Request ステータス コードが返されます。一致していればフォーム送信が処理され、「フォーム送信されました。」が出力されます。フォームが読み込まれるとき、uuid パッケージを使用して一意のトークン値を生成し、その値をセッションに保存し、最後にフォーム ページをユーザーに返します。

3. 概要

この記事では、Gin フレームワークにおけるセッション管理メカニズムとそのアプリケーションについて紹介しました。セッション管理は Web アプリケーション開発における重要なトピックであり、ユーザー情報の保存、ユーザー ID の検証、CSRF 攻撃の防止などに使用できます。 Gin フレームワークでは、ミドルウェアを使用してセッション管理を実装でき、セッション パッケージは便利な操作インターフェイスを提供します。実際のアプリケーションでは、認証、認可、暗号化、ロギングなどの他の機能モジュールを組み合わせて、より完全な Web アプリケーション システムを構築することもできます。

以上がセッション管理と、Gin フレームワークでのそのアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

iPhoneのホーム画面から削除を元に戻す方法 iPhoneのホーム画面から削除を元に戻す方法 Apr 17, 2024 pm 07:37 PM

ホーム画面から重要なものを削除してしまい、元に戻そうとしていますか?さまざまな方法でアプリのアイコンを画面に戻すことができます。 iPhoneでホーム画面から削除を元に戻す方法 前述したように、iPhoneでこの変更を復元する方法はいくつかあります。方法 1 – App ライブラリのアプリ アイコンを置き換える App ライブラリから直接ホーム画面にアプリ アイコンを配置できます。ステップ 1 – 横にスワイプして、アプリ ライブラリ内のすべてのアプリを見つけます。ステップ 2 – 前に削除したアプリのアイコンを見つけます。ステップ 3 – アプリのアイコンをメインライブラリからホーム画面上の正しい場所にドラッグするだけです。これが応用図です

PHP における矢印記号の役割と実際の応用 PHP における矢印記号の役割と実際の応用 Mar 22, 2024 am 11:30 AM

PHP における矢印記号の役割と実際の応用 PHP では、通常、オブジェクトのプロパティとメソッドにアクセスするために矢印記号 (->) が使用されます。オブジェクトとは、PHP におけるオブジェクト指向プログラミング (OOP) の基本概念の 1 つで、実際の開発においては、矢印記号がオブジェクトを操作する上で重要な役割を果たします。この記事では、矢印記号の役割と実際の応用例を紹介し、読者の理解を深めるために具体的なコード例を示します。 1. オブジェクトのプロパティにアクセスするための矢印シンボルの役割 矢印シンボルは、オブジェクトのプロパティにアクセスするために使用できます。ペアをインスタンス化するとき

初心者から熟練者まで: Linux tee コマンドのさまざまなアプリケーション シナリオを探索する 初心者から熟練者まで: Linux tee コマンドのさまざまなアプリケーション シナリオを探索する Mar 20, 2024 am 10:00 AM

Linuxtee コマンドは、既存の出力に影響を与えることなく、出力をファイルに書き込んだり、別のコマンドに出力を送信したりできる、非常に便利なコマンド ライン ツールです。この記事では、入門から習熟まで、Linuxtee コマンドのさまざまな応用シナリオを詳しく見ていきます。 1. 基本的な使い方 まずは、teeコマンドの基本的な使い方を見てみましょう。 tee コマンドの構文は次のとおりです。 tee[OPTION]...[FILE]...このコマンドは、標準入力からデータを読み取り、データを保存します。

Go 言語の利点と応用シナリオを探る Go 言語の利点と応用シナリオを探る Mar 27, 2024 pm 03:48 PM

Go 言語は、Google によって開発され、2007 年に初めてリリースされたオープンソース プログラミング言語です。シンプルで習得しやすく、効率的で同時実行性の高い言語となるように設計されており、ますます多くの開発者に好まれています。この記事では、Go 言語の利点を探り、Go 言語に適したいくつかのアプリケーション シナリオを紹介し、具体的なコード例を示します。利点: 強力な同時実行性: Go 言語には、同時プログラミングを簡単に実装できる軽量スレッドのゴルーチンのサポートが組み込まれています。 Goroutin は go キーワードを使用して開始できます

PHP は新規セッションを開始するか、既存のセッションを再開します PHP は新規セッションを開始するか、既存のセッションを再開します Mar 21, 2024 am 10:26 AM

この記事では、PHP でセッションを新規に開始したり、既存のセッションを復元したりする方法について詳しく説明します。非常に実践的だと編集者が考えたので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。 PHP セッション管理: 新しいセッションの開始または既存のセッションの再開 はじめに セッション管理は PHP において非常に重要であり、ユーザー セッション中にユーザー データを保存したりアクセスしたりすることができます。この記事では、PHP で新しいセッションを開始する方法、または既存のセッションを再開する方法について詳しく説明します。新しいセッションの開始 session_start() 関数はセッションが存在するかどうかを確認し、存在しない場合は新しいセッションを作成します。セッションデータを読み取って変換することもできます

クラウドコンピューティング分野におけるLinuxの幅広い応用 クラウドコンピューティング分野におけるLinuxの幅広い応用 Mar 20, 2024 pm 04:51 PM

クラウド コンピューティングの分野における Linux の幅広い応用 クラウド コンピューティング テクノロジの継続的な開発と普及に伴い、オープン ソース オペレーティング システムとしての Linux はクラウド コンピューティングの分野で重要な役割を果たしています。 Linux システムは、その安定性、セキュリティ、柔軟性により、さまざまなクラウド コンピューティング プラットフォームやサービスで広く使用されており、クラウド コンピューティング テクノロジーの開発に強固な基盤を提供しています。この記事では、クラウド コンピューティング分野における Linux の幅広いアプリケーションを紹介し、具体的なコード例を示します。 1. クラウドコンピューティングプラットフォームにおけるLinuxのアプリケーション仮想化技術 仮想化技術

MySQL タイムスタンプを理解する: 機能、特徴、およびアプリケーション シナリオ MySQL タイムスタンプを理解する: 機能、特徴、およびアプリケーション シナリオ Mar 15, 2024 pm 04:36 PM

MySQL タイムスタンプは、日付、時刻、または日付と時刻を格納できる非常に重要なデータ型です。実際の開発プロセスでは、タイムスタンプを合理的に使用すると、データベース操作の効率が向上し、時間関連のクエリと計算が容易になります。この記事では、MySQL タイムスタンプの機能、特徴、および適用シナリオについて説明し、具体的なコード例を示して説明します。 1. MySQL タイムスタンプの機能と特徴 MySQL には 2 種類のタイムスタンプがあり、1 つは TIMESTAMP です。

実行中のアプリを終了する方法に関する Apple のチュートリアル 実行中のアプリを終了する方法に関する Apple のチュートリアル Mar 22, 2024 pm 10:00 PM

1. まず、小さな白い点をクリックします。 2. デバイスをクリックします。 3. 「詳細」をクリックします。 4. 「アプリケーションスイッチャー」をクリックします。 5. アプリケーションのバックグラウンドを閉じます。

See all articles