日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Express Session 的基本使用

發布時間:2024/7/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Express Session 的基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 Session 簡單介紹

session 是另一種記錄客戶狀態的機制,不同的是 Cookie 保存在客戶端瀏覽器中,而 session 保存在服務器上。

Cookie 數據存放在客戶的瀏覽器上,Session 數據放在服務器上。Session 相比 Cookie 要 更安全一些。由于 Session 保存到服務器上,所以當訪問量增多的時候,會比較占用服務器 的性能。單個 cookie 保存的數據大小不能超過 4K,很多瀏覽器都限制一個站點最多保存 20 個 cookie。Session 沒有這方面的限制。Session 是基于 Cookie 進行工作的。

二、 Session 的工作流程

當瀏覽器訪問服務器并發送第一次請求時,服務器端會創建一個 session 對象,生成一 個類似于 key,value 的鍵值對, 然后將 key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次 再訪問時,攜帶 key(cookie),找到對應的 session(value)。

三、 express-session 的使用

https://www.npmjs.com/package/express-session

1、安裝 express-session

cnpm install express-session --save

2、引入 express-session

var session = require("express-session");

3、 設置官方文檔提供的中間件

app.use(session({ secret: 'keyboard cat', resave: true, saveUninitialized: true }))

4、使用
設置值

req.session.username = "張三";

獲取值

req.session.username


四、 express-session 的常用參數

app.use(session({ secret: '12345', name: 'name', cookie: {maxAge: 60000}, resave: false, saveUninitialized: true }));


五、 express-session 的常用方法

req.session.destroy(function(err) { /*銷毀 session*/ }) req.session.username='張三'; //設置 session req.session.username //獲取 session req.session.cookie.maxAge=0; //重新設置 cookie 的過期時間,它會銷毀所有的session

const express = require("express") const ejs = require("ejs") const bodyParser = require("body-parser") const cookieParser = require('cookie-parser') const session = require('express-session') const app = new express() // 配置模板引擎 app.engine("html", ejs.__express) app.set("view engine", "html") // 配置靜態web目錄 app.use(express.static("static"))// 配置第三方中間件 app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) // 配置cookieParser中間件 app.use(cookieParser("zep")) // 配置session的中間件 app.use(session({secret: 'keyboard cat', // 服務器端生成session的簽名name: "sessionName", // 修改session對應的cookie的名稱resave: false, // 強制保存 session ,即使它并沒有變化saveUninitialized: true, // 強制將未初始化的session存儲cookie: { maxAge: 1000*60, // 設置過期時間為一分鐘secure: false // true 表示只有https協議才能訪問cookie},rolling: true // 在每次請求時強行設置cookie,這將重置cookie的過期時間(默認值為false) })) app.get("/book", (req, res)=> {// 設置sessionreq.session.username = "張三三"res.send("book頁面") }) app.get("/getbook", (req, res)=> {// 獲取sessionif(req.session.username) {res.send(req.session.username + "-已登錄")} else {res.send("沒有登錄")} })app.get("/", (req, res)=> {// 設置cookie 如果cookie沒有過期的話,關閉瀏覽器后重新打開,cookie仍然還在,不會被銷毀res.cookie("username", "張三", {maxAge: 1000*60*60,signed: true})res.send("首頁") })app.get("/article", (req, res) => {// 獲取cookielet username = req.cookies.usernameconsole.log(username)res.send("新聞頁面--" + username) })app.get("/user", (req, res) => {// 獲取加密的cookielet username = req.signedCookies.usernameres.send("用戶頁面--" + username) })app.get("/login", (req, res)=> {// 設置sessionreq.session.username = "張三啊"res.send("執行登錄") })app.get("/loginOut", (req, res)=> {// 1.設置session的過期時間為0//req.session.cookie.maxAge = 0// 2.銷毀指定的session//req.session.username = ""// 3.銷毀所有的sessionreq.session.destroy()res.send("退出登錄") })app.post("/doLogin", (req, res)=> {var body = req.bodyconsole.log(body)res.send("執行提交") })app.listen(3000)

六、 負載均衡配置 Session,把 Session 保存到數據庫里面

  • 需要安裝 express-session 和 connect-mongo 模塊
  • 引入模塊
  • const session = require("express-session"); const MongoStore = require('connect-mongo');
  • 配置中間件
  • // 配置session的中間件 app.use(session({secret: 'keyboard cat', // 服務器端生成session的簽名name: "sessionName", // 修改session對應的cookie的名稱resave: false, // 強制保存 session ,即使它并沒有變化saveUninitialized: true, // 強制將未初始化的session存儲cookie: { maxAge: 1000*60, // 設置過期時間為一分鐘secure: false // true 表示只有https協議才能訪問cookie},rolling: true, // 在每次請求時強行設置cookie,這將重置cookie的過期時間(默認值為false)store: MongoStore.create({mongoUrl: 'mongodb://admin:admin@localhost/itying?authSource=admin&w=1',// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管發出了多少請求,在24小時內,只更新一次session,除非你改變了這個session}) }))

    const express = require("express") const ejs = require("ejs") const bodyParser = require("body-parser") const cookieParser = require('cookie-parser') const session = require('express-session') const MongoStore = require('connect-mongo');const app = new express() // 配置模板引擎 app.engine("html", ejs.__express) app.set("view engine", "html") // 配置靜態web目錄 app.use(express.static("static"))// 配置第三方中間件 app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) // 配置cookieParser中間件 app.use(cookieParser("zep")) // 配置session的中間件 app.use(session({secret: 'keyboard cat', // 服務器端生成session的簽名name: "sessionName", // 修改session對應的cookie的名稱resave: false, // 強制保存 session ,即使它并沒有變化saveUninitialized: true, // 強制將未初始化的session存儲cookie: { maxAge: 1000*60, // 設置過期時間為一分鐘secure: false // true 表示只有https協議才能訪問cookie},rolling: true, // 在每次請求時強行設置cookie,這將重置cookie的過期時間(默認值為false)store: MongoStore.create({mongoUrl: 'mongodb://admin:admin@localhost/itying?authSource=admin&w=1',// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管發出了多少請求,在24小時內,只更新一次session,除非你改變了這個session}) })) app.get("/book", (req, res)=> {// 設置sessionreq.session.username = "張三三"res.send("book頁面") }) app.get("/getbook", (req, res)=> {// 獲取sessionif(req.session.username) {res.send(req.session.username + "-已登錄")} else {res.send("沒有登錄")} })app.get("/", (req, res)=> {// 設置cookie 如果cookie沒有過期的話,關閉瀏覽器后重新打開,cookie仍然還在,不會被銷毀res.cookie("username", "張三", {maxAge: 1000*60*60,signed: true})res.send("首頁") })app.get("/article", (req, res) => {// 獲取cookielet username = req.cookies.usernameconsole.log(username)res.send("新聞頁面--" + username) })app.get("/user", (req, res) => {// 獲取加密的cookielet username = req.signedCookies.usernameres.send("用戶頁面--" + username) })app.get("/login", (req, res)=> {// 設置sessionreq.session.username = "張三啊"res.send("執行登錄") })app.get("/loginOut", (req, res)=> {// 1.設置session的過期時間為0//req.session.cookie.maxAge = 0// 2.銷毀指定的session//req.session.username = ""// 3.銷毀所有的sessionreq.session.destroy()res.send("退出登錄") })app.post("/doLogin", (req, res)=> {var body = req.bodyconsole.log(body)res.send("執行提交") })app.listen(3000)

    總結

    以上是生活随笔為你收集整理的Express Session 的基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。