express中使用session和cookie

cookie和session的工作機(jī)制:

由于cookie保存在客戶端,不能存放敏感信息,而session保存于服務(wù)器端,可用于存放敏感信息。比如對(duì)用戶登錄狀態(tài)的保存。但是http是無狀態(tài)的,session如何保存用戶登錄狀態(tài)呢,當(dāng)用戶登錄成功之后,服務(wù)器端會(huì)將用戶信息對(duì)應(yīng)于一個(gè)session數(shù)據(jù),并將獲取這個(gè)session數(shù)據(jù)的鑰匙發(fā)送給客戶端,而這個(gè)鑰匙在客戶端的保存形式是保存在cookie中,用戶再次訪問當(dāng)前網(wǎng)站的其他網(wǎng)頁的時(shí)候,將cookie信息一起發(fā)送給服務(wù)器,當(dāng)服務(wù)器收到cookie中保存的鑰匙的時(shí)候,查看這個(gè)鑰匙對(duì)應(yīng)的session數(shù)據(jù),從而判斷用戶是否是在登錄狀態(tài)的,如果已經(jīng)登錄,則可以直接訪問,否則跳轉(zhuǎn)到登錄頁。

而在express框架中,默認(rèn)不支持Session和Cookie,但是可以使用第三方中間件express-session來解決

下載:

npm install --save express-session

配置

var session = require('express-session'); # 引入

# 配置中間件
app.use(session({
  // 配置加密字符串,會(huì)在原有加密基礎(chǔ)上和這個(gè)字符串拼起來去加密
  // 目的是:增加安全性,防止客戶端惡意偽造
  secret: 'chen',
  resave: true,
  // 當(dāng)為false,表示只有使用session,才會(huì)分配鑰匙
  // 當(dāng)為true,表示無論是否使用session,都會(huì)分配鑰匙
  saveUninitialized: false
}))

使用

#req.session.xx = xx表示設(shè)置session(對(duì)象)
# req.session.xx 表示獲取session數(shù)據(jù)
app.get('/',(req,res) => {
    # 當(dāng)訪問/的時(shí)候,設(shè)置當(dāng)前session值,并將session鑰匙回傳給客戶端,保存在客戶端的cookie中
  req.session.uname = 'chen';
  res.render('index.html',{
    name: 'chen'
  })
})

app.get('/a',(req,res) => {
    // 當(dāng)訪問/a的時(shí)候,獲取session數(shù)據(jù)
  console.log(req.session.uname);
  res.send('ok');
})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容