sách gpt4 ăn đã đi

phiên - Các phương pháp hay nhất cho phiên (gorilla/session)

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 13:10:56 31 4
mua khóa gpt4 giày nike

Trước khi bắt đầu sử dụng phiên trong golang, tôi cần trả lời một số câu hỏi

ví dụ về phiên

nhập "github.com/gorilla/sessions"

var store = sessions.NewCookieStore([]byte("33446a9dcf9ea060a0a6532b166da32f304af0de"))

hàm Handler(w http.ResponseWriter, r *http.Request){
phiên, _ := store.Get(r, "tên-phiên")

session.Values["foo"] = "bar"
phiên.Giá trị[42] = 43
phiên.Lưu(r, w)

fmt.Fprint(w, "Xin chào thế giới :)")
}

hàm main(){
store.Options = &sessions.Options{
Tên miền: "localhost",
Con đường: "/",
Tuổi tối đa: 60 * 15,
Bảo mật: sai,
HttpOnly: đúng,
}
}

Quý đầu tiên:

Có thể thêm nhiều phiên với các tên khác nhau trên cùng một tên miền không?

session1, _ := store.Get(r, "tên-phiên-1")
session2, _ := store.Get(r, "tên-phiên-2")

Khi nào bạn cần nhiều phiên trên cùng một tên miền?

Quý 2:

Cách tốt nhất để nhận các biến từ phiên là gì? my_session_var = session.Values["foo"]

Quý 3:

Làm cách nào để kiểm tra xem phiên có được lưu chính xác không? Nếu bạn ghé thăm tương tự bản đồ để thiết lập và nhận các biến?

gia hạn

gói chính

nhập khẩu (
"github.com/gorilla/sessions"
)

đã từng là (
lưu trữ = phiên.NewCookieStore([]byte("33446a9dcf9ea060a0a6532b166da32f304af0de"))
)

trình xử lý kiểu func(w http.ResponseWriter, r *http.Request, s *sessions.Session)

func (h trình xử lý) ServeHTTP(w http.ResponseWriter, r *http.Request){
phiên, _ := store.Get(r, "tên-phiên")

h(w, r, phiên)
}

hàm Handler_404(w http.ResponseWriter, r *http.Request, s *sessions.Session){
fmt.Fprint(w, "Ồ, có gì đó không ổn!")
}

错误

# đối số dòng lệnh
.\mux.go:101: không thể chuyển đổi Handler_404 (kiểu func(http.ResponseWriter, *http.Request, *sessions.Session)) thành kiểu http.HandlerFunc

câu trả lời hay nhất

bài báo"PHẦN MỞ RỘNG CƠ BẢN CỦA CÁC TRÌNH XỬ LÝ HTTP CỦA GO” (Simon Whitehead) hiển thị các ví dụ về thời điểm và vị trí để xác định phiên.
chứ không phải ở Người xử lý chính nó và rất nhiều mã phải được sao chép khi xác định các trình xử lý khác.

sử dụng loại được đặt tên , bạn có thể xác định những gì bạn cầnNgười xử lý:

trình xử lý kiểu func(w http.ResponseWriter, r *http.Request, db *mgo.Database)

(Trong trường hợp của bạn, đó sẽ là phiên gorilla chứ không phải phiên mgo hoặc cơ sở dữ liệu)

nhiệt() chức năngCó thể xử lý việc tạo session (ở đây là mgo session, nhưng ý tưởng về session trong các framework khác thì giống nhau)

hàm init() {
phiên, lỗi = mgo.Dial("localhost")

nếu err != nil {
log.Println(lỗi)
}
}

Bạn có thể đảm bảo rằng loại chức năng này ('người xử lý') tôn trọng Phục vụHTTP() chức năng, lưu ý:

  • quản lý phiên (sao chép/đóng)
  • Gọi trình xử lý thực tế của bạn (nó có thể có nhiều đối số hơn là chỉ TRONGr)

    func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    s := phiên.Clone()
    hoãn s. Đóng()

    h(w, r, s.DB("ví dụ"))
    }

Sau đó bạn có thể xác định thực tế của bạnNgười xử lý(Một lần nữa, không chỉTRONGr):

chức năng myHandler(w http.ResponseWriter, r *http.Request, db *mgo.Database) {
var người dùng []người dùng

db.C("người dùng").Tìm(nil).Tất cả(&người dùng)

đối với _, người dùng := phạm vi người dùng {
fmt.Fprintf(w, "%s là %d tuổi", user.Name, user.Age)
}
}

Bạn có thể sử dụng trình xử lý này trong máy chủ:

hàm main() {
mux := http.NewServeMux()
mux.Handle("/", trình xử lý(myHandler))
http.ListenAndServe(":8080", bộ nhớ)
}

Ý tưởng là để chủ yếu() "Đường ống" bị hạn chế ở mức tối thiểu trong khi có một đường dẫn có nhiều tham số hơn (bao gồm cả phiên của bạn) Người xử lý
Điều này cho phép bạn sử dụng khác nhau Người xử lý Yêu cầu rất ít đường ống, giữ chủ yếu() Chỉ được sử dụng để khai báo các đường dẫn khác nhau (không dùng để khởi tạo phiên và trình xử lý)


Cập nhật 2019: Trong bối cảnh liên quan khác, xem thêm "Cách xử lý các phiên”.

Về phiên - các phương pháp hay nhất về phiên (gorilla/session), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/26106363/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress