ホームページ >バックエンド開発 >Golang >alexedwards/scs/v2 を使用してセッションを追加するために http.ServeHttp を go でラップすることは可能ですか

alexedwards/scs/v2 を使用してセッションを追加するために http.ServeHttp を go でラップすることは可能ですか

PHPz
PHPz転載
2024-02-09 09:30:19634ブラウズ

是否可以将 http.ServeHttp 包装在 go 中以使用 alexedwards/scs/v2 添加会话

php 編集者のZimoさん、こんにちは! alexedwards/scs/v2 を使用してセッションを追加するために Go で http.ServeHTTP をラップすることについての質問については、答えは「はい」です。 alexedwards/scs/v2 ライブラリを使用してセッションを管理し、Go コードで http.ServeHTTP をラップすることができます。このようにして、HTTP リクエストを処理するときにアプリケーションでセッションを使用するためのセッション管理機能を追加できます。これにより、認証、認可、その他のセッション関連の機能をアプリケーションに簡単に追加できます。この回答がお役に立てば幸いです。

質問内容

goで書かれた既存のhttpサーバーにセッションを追加しようとしています。次のコードがあります

リーリー

を使用してセッションを追加したい https://pkg.go.dev/github.com/alexedwards/scs/v2#sessionmanager.loadandsave

リンク内のサンプルコードは

です。 リーリー

コード例では、mux をloadandsave に渡してから、新しいハンドラーを http.listenandserve(port, newhandler) に渡します。私の場合、ハンドラーは *httpserver 構造に追加したservehttpメソッドから来ています。この例のハンドラーはマルチプレクサーからのものです。

###私はここでは新人です。私のservehttpメソッドをloadandsaveに渡し、loadandsaveから返されたハンドラを使用することは可能ですか?そうでない場合、私の例で使用されている http.server struct フィールドを http.listenandserve(port, handler) に渡す方法はありますか?

解決策

peterfunc (s *httpserver) run(sessionmanager *scs.sessionmanager) {と同じように アドレス := "127.0.0.1:8080" // httpサーバーをloadandsaveミドルウェアでラップします。 セッション付きハンドラー := sessionmanager.loadandsave(s) ... } これは、

sessionmanager がこのメソッドの外部 (scs.new() を使用) で作成および構成され、run の呼び出し時に渡されることを意味します。 そこで、
sessionmanagerhttpserver 構造体のフィールドに設定できます。 これにより、
(s *httpserver)servehttp(writer http.responsewriter, r *http.request) がそれを取得できるようになります。 ###例えば:### リーリー

以上がalexedwards/scs/v2 を使用してセッションを追加するために http.ServeHttp を go でラップすることは可能ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。