Heim >Backend-Entwicklung >Golang >Ist es möglich, http.ServeHttp einzubinden, um eine Sitzung mit alexedwards/scs/v2 hinzuzufügen?
Hallo, PHP-Editor Zimo! Bezüglich Ihrer Frage zum Einschließen von http.ServeHTTP in Go zum Hinzufügen von Sitzungen mit alexedwards/scs/v2 lautet die Antwort „Ja“. Sie können die alexedwards/scs/v2-Bibliothek verwenden, um Sitzungen zu verwalten und http.ServeHTTP in Ihren Go-Code einzubinden. Auf diese Weise können Sie Sitzungsverwaltungsfunktionen hinzufügen, um Sitzungen in Ihrer Anwendung bei der Verarbeitung von HTTP-Anfragen zu verwenden. Auf diese Weise können Sie Ihrer Anwendung problemlos Authentifizierung, Autorisierung und andere sitzungsbezogene Funktionen hinzufügen. Ich hoffe, diese Antwort ist hilfreich für Sie!
Ich versuche, Sitzungen zu einem vorhandenen, in go geschriebenen http-Server hinzuzufügen. Ich habe den folgenden Code
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) { ... }
Ich möchte Sitzung hinzufügen verwenden https://pkg.go.dev/github.com/alexedwards/scs/v2#sessionmanager.loadandsave
Der Beispielcode im Link ist
mux := http.NewServeMux() mux.HandleFunc("/put", putHandler) mux.HandleFunc("/get", getHandler) // Wrap your handlers with the LoadAndSave() middleware. http.ListenAndServe(":4000", sessionManager.LoadAndSave(mux))
Der Beispielcode übergibt Mux an Loadandsave und übergibt dann den neuen Handler an http.listenandserve(port, newhandler). In meinem Fall stammte der Handler von der Methode „servehttp“, die ich der Struktur „*httpsserver“ hinzugefügt habe. Der Handler im Beispiel stammt von einem Multiplexer.
Ich bin neu hier. Ist es möglich, meine Methode „servehttp“ an „loadandsave“ zu übergeben und den von „loadandsave“ zurückgegebenen Handler zu verwenden? Wenn nicht, gibt es eine Möglichkeit, die in meinem Beispiel verwendeten http.server-Strukturfelder an http.listenandserve(port, handler) zu übergeben?
Genau wie peters func (s *httpserver) run(sessionmanager *scs.sessionmanager) {
Adresse := "127.0.0.1:8080"
// Wickeln Sie Ihren http-Server mit der Loadandsave-Middleware ein.
handlerwithsessions := sessionmanager.loadandsave(s)
...
}
Das bedeutet, Zum Beispiel: sessionmanager
außerhalb dieser Methode zu erstellen und zu konfigurieren (unter Verwendung von scs. new( )sessionmanager
(使用 scs.new()),并在调用 run
) und beim Aufruf von run
übergeben.
Dort können Sie sessionmanager
设置为 httpserver
Felder in der Struktur platzieren.
Dadurch kann Ihr (s *httpserver) servehttp(writer http.responsewriter, r *http.request)
es abrufen. 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)
}
Das obige ist der detaillierte Inhalt vonIst es möglich, http.ServeHttp einzubinden, um eine Sitzung mit alexedwards/scs/v2 hinzuzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!