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 ครั้ง