ExpressJS - เซสชัน
HTTP ไม่มีสถานะ ในการเชื่อมโยงคำขอกับคำขออื่น ๆ คุณต้องมีวิธีการจัดเก็บข้อมูลผู้ใช้ระหว่างคำขอ HTTP คุกกี้และพารามิเตอร์ URL เป็นวิธีที่เหมาะสมในการขนส่งข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ แต่ทั้งสองสามารถอ่านได้และในฝั่งไคลเอ็นต์ เซสชันแก้ปัญหานี้ได้อย่างตรงจุด คุณกำหนดรหัสลูกค้าและส่งคำขอเพิ่มเติมทั้งหมดโดยใช้ ID นั้น ข้อมูลที่เกี่ยวข้องกับไคลเอนต์จะถูกเก็บไว้บนเซิร์ฟเวอร์ที่เชื่อมโยงกับ ID นี้
เราจะต้องใช้Express-sessionดังนั้นให้ติดตั้งโดยใช้รหัสต่อไปนี้
npm install --save express-session
เราจะใส่ไฟล์ session และ cookie-parserมิดเดิลแวร์ในสถานที่ ในตัวอย่างนี้เราจะใช้ที่เก็บเริ่มต้นสำหรับการจัดเก็บเซสชันนั่นคือ MemoryStore ห้ามใช้สิ่งนี้ในสภาพแวดล้อมการผลิต มิดเดิลแวร์ของเซสชันจะจัดการทุกอย่างให้เราเช่นการสร้างเซสชันการตั้งค่าคุกกี้เซสชันและการสร้างวัตถุเซสชันในreq วัตถุ.
เมื่อใดก็ตามที่เราทำการร้องขอจากไคลเอนต์เดิมอีกครั้งเราจะมีข้อมูลเซสชันของพวกเขาเก็บไว้กับเรา (เนื่องจากเซิร์ฟเวอร์ไม่ได้รีสตาร์ท) เราสามารถเพิ่มคุณสมบัติเพิ่มเติมให้กับวัตถุเซสชันได้ ในตัวอย่างต่อไปนี้เราจะสร้างตัวนับมุมมองสำหรับลูกค้า
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var app = express();
app.use(cookieParser());
app.use(session({secret: "Shh, its a secret!"}));
app.get('/', function(req, res){
if(req.session.page_views){
req.session.page_views++;
res.send("You visited this page " + req.session.page_views + " times");
} else {
req.session.page_views = 1;
res.send("Welcome to this page for the first time!");
}
});
app.listen(3000);
สิ่งที่โค้ดข้างต้นทำคือเมื่อผู้ใช้เยี่ยมชมไซต์จะสร้างเซสชันใหม่สำหรับผู้ใช้และกำหนดคุกกี้ให้ ครั้งต่อไปที่ผู้ใช้มาตรวจสอบคุกกี้และpage_view ตัวแปรเซสชันได้รับการอัปเดตตามนั้น
ตอนนี้ถ้าคุณเรียกใช้แอพและไปที่ localhost:3000ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
หากคุณกลับมาที่หน้านี้ตัวนับหน้าจะเพิ่มขึ้น หน้าในภาพหน้าจอต่อไปนี้ถูกรีเฟรช 42 ครั้ง