日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

php小編子墨你好!關于將http.ServeHTTP包裝在Go中以使用alexedwards/scs/v2添加會話的問題,答案是肯定的。你可以使用alexedwards/scs/v2這個庫來管理會話,而將http.ServeHTTP包裝在你的Go代碼中。這樣,你就可以在處理HTTP請求時添加會話管理功能,以便在應用程序中使用會話。通過這種方式,你可以輕松地為你的應用程序添加身份驗證、授權和其他會話相關的功能。希望這個回答對你有幫助!

問題內容

我正在嘗試將會話添加到用 go 編寫的現有 http 服務器。我有如下代碼

type httpserver struct {
    getroutes  map[string]http.handlerfunc // pattern => handler
    postroutes map[string]http.handlerfunc
    server     http.server
}
func (s *httpserver) run() {
    address := "127.0.0.1:8080"
    s.server = http.server{
        addr:           address,
        handler:        s,
        readtimeout:    10 * time.second,
        writetimeout:   10 * time.second,
        maxheaderbytes: 1 << 20,
    }
    log.fatal(s.server.listenandserve())
}
func (s *httpserver) servehttp(writer http.responsewriter, r *http.request) {
     ...
}

登錄后復制

我想使用添加會話
https://pkg.go.dev/github.com/alexedwards/scs/v2#sessionmanager.loadandsave

鏈接中的示例代碼是

mux := http.NewServeMux()
    mux.HandleFunc("/put", putHandler)
    mux.HandleFunc("/get", getHandler)

    // Wrap your handlers with the LoadAndSave() middleware.
    http.ListenAndServe(":4000", sessionManager.LoadAndSave(mux))

登錄后復制

示例代碼將 mux 傳遞到 loadandsave,然后將新處理程序傳遞到 http.listenandserve(port, newhandler)。就我而言,處理程序來自我添加到 *httpserver 結構中的 servehttp 方法。示例中的處理程序來自多路復用器。

我是新來的。是否可以將我的 servehttp 方法傳遞到 loadandsave 并使用從 loadandsave 返回的處理程序?如果沒有,有沒有辦法將我的示例中使用的 http.server 結構字段傳遞到 http.listenandserve(port, handler) 中?

解決方法

正如 peter 的 func (s *httpserver) run(sessionmanager *scs.sessionmanager) {
address := “127.0.0.1:8080”

// wrap your httpserver with the loadandsave middleware.
handlerwithsessions := sessionmanager.loadandsave(s)


}

這意味著在此方法之外創建和配置 sessionmanager (使用 scs.new()),并在調用 run 時傳入。
在那里,您可以將 sessionmanager 設置為 httpserver 結構中的字段。
這將允許您的 (s *httpserver) servehttp(writer http.responsewriter, r *http.request) 檢索它。

例如:

package main

import (
    "github.com/alexedwards/scs/v2"
    "log"
    "net/http"
    "time"
)

type HttpServer struct {
    getRoutes     map[string]http.HandlerFunc // pattern => handler
    postRoutes    map[string]http.HandlerFunc
    server        http.Server
    sessionManager *scs.SessionManager
}

func (s *HttpServer) Run(sessionManager *scs.SessionManager) {
    address := "127.0.0.1:8080"
    
    // Set the sessionManager field
    s.sessionManager = sessionManager
    
    // Wrap your HttpServer with the LoadAndSave middleware.
    handlerWithSessions := sessionManager.LoadAndSave(s)
    
    s.server = http.Server{
        Addr:           address,
        Handler:        handlerWithSessions, // Use the wrapped handler
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }
    
    log.Fatal(s.server.ListenAndServe())
}

func (s *HttpServer) ServeHTTP(writer http.ResponseWriter, r *http.Request) {
    // Access the session via the sessionManager field
    session := s.sessionManager.Load(r)
    
    // Use the session, e.g. session.Put, session.Get, etc.
    // ...
}

func main() {
    // Create and configure the session manager
    sessionManager := scs.New()
    sessionManager.Lifetime = 24 * time.Hour
    
    // Create your custom HttpServer
    httpServer := &HttpServer{
        getRoutes:  make(map[string]http.HandlerFunc),
        postRoutes: make(map[string]http.HandlerFunc),
    }
    
    // Start the server with the session manager
    httpServer.Run(sessionManager)
}

登錄后復制

分享到:
標簽:overflow
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定