Phiên cấp tốc

Cách sử dụng phiên để xác định người dùng qua các yêu cầu

Theo mặc định, các yêu cầu Express là tuần tự và không có yêu cầu nào có thể được liên kết với nhau. Không có cách nào để biết liệu yêu cầu này có đến từ một ứng dụng khách đã thực hiện yêu cầu trước đó hay không.

Người dùng không thể được xác định trừ khi sử dụng một số loại cơ chế làm cho nó có thể.

Đó là những gì phiên là.

Khi được triển khai, mọi người dùng API hoặc trang web của bạn sẽ được chỉ định một phiên duy nhất và điều này cho phép bạn lưu trữ trạng thái người dùng.

Chúng tôi sẽ sử dụngexpress-sessionmô-đun, được duy trì bởi nhóm Express.

Bạn có thể cài đặt nó bằng cách sử dụng

npm install express-session

và sau khi hoàn tất, bạn có thể khởi tạo nó trong ứng dụng của mình với

const session = require('express-session')

Đây là một phần mềm trung gian, vì vậy bạnTải vềnó trong Express bằng cách sử dụng

const express = require('express')
const session = require('express-session')

const app = express() app.use(session({ ‘secret’: ‘343ji43j4n3jn4jk3n’ }))

Sau khi điều này được thực hiện, tất cả các yêu cầu đến các tuyến ứng dụng hiện đang sử dụng các phiên.

secretlà tham số bắt buộc duy nhất, nhưng bạn có thể sử dụng nhiều tham số khác. Nó phải là một chuỗi duy nhất ngẫu nhiên cho ứng dụng của bạn.

Phiên được đính kèm với yêu cầu, vì vậy bạn có thể truy cập nó bằng cách sử dụngreq.sessionđây:

app.get('/', (req, res, next) => {
  // req.session
}

Đối tượng này có thể được sử dụng để lấy dữ liệu ra khỏi phiên và cũng để thiết lập dữ liệu:

req.session.name = 'Flavio'
console.log(req.session.name) // 'Flavio'

Dữ liệu này được tuần tự hóa thànhJSONkhi được lưu trữ, vì vậy bạn có thể an toàn khi sử dụng các đối tượng lồng nhau.

Bạn có thể sử dụng các phiên để giao tiếp dữ liệu với phần mềm trung gian được thực thi sau này hoặc để truy xuất nó sau này, trên các yêu cầu tiếp theo.

Dữ liệu phiên được lưu trữ ở đâu? Nó phụ thuộc vào cách bạn thiết lậpexpress-sessionmô-đun.

Nó có thể lưu trữ dữ liệu phiên trong

  • ký ức, không dành cho sản xuất
  • acơ sở dữ liệunhư MySQL hoặc Mongo
  • abộ nhớ đệmnhư Redis hoặc Memcached

Có một danh sách lớn các gói thứ 3 triển khai nhiều kho lưu trữ bộ nhớ đệm tương thích khác nhau tronghttps://github.com/expressjs/session

Tất cả các giải pháp đều lưu trữ id phiên trong cookie và giữ dữ liệu ở phía máy chủ. Máy khách sẽ nhận được id phiên trong cookie và sẽ gửi nó cùng với mọi yêu cầu HTTP.

Chúng tôi sẽ tham chiếu phía máy chủ đó để liên kết id phiên với dữ liệu được lưu trữ cục bộ.

Bộ nhớ là mặc định, nó không yêu cầu thiết lập đặc biệt từ phía bạn, đó là thứ đơn giản nhất nhưng nó chỉ dành cho mục đích phát triển.

Sự lựa chọn tốt nhất là một bộ nhớ đệm như Redis, mà bạn cần thiết lập cơ sở hạ tầng của riêng nó.

Một gói phổ biến khác để quản lý các phiên trong Express làcookie-session, có một sự khác biệt lớn: nó lưu trữ dữ liệu phía máy khách trong cookie. Tôi không khuyên bạn nên làm điều đó bởi vì lưu trữ dữ liệu trong cookie có nghĩa là dữ liệu được lưu trữ ở phía máy khách và được gửi đi gửi lại trong mọi yêu cầu duy nhất của người dùng. Nó cũng có kích thước hạn chế, vì nó chỉ có thể lưu trữ 4 kilobyte dữ liệu. Cookie cũng cần được bảo mật, nhưng theo mặc định thì không, vì có thể có Cookie an toàn trên các trang HTTPS và bạn cần phải định cấu hình chúng nếu bạn có proxy.

Tải xuống miễn phí của tôiSổ tay Express.js


Các hướng dẫn nhanh hơn: