nodejs的會話總結

前言:redis

  http是一個無狀態協議,因此客戶端每次發出請求時,下一次請求就沒法得知上一次請求所包含的狀態數據,那麼如何能把一個用戶的狀態數據關聯起來?
1.cookiemongodb

  一開始,人們採用cookie這門技術來解決這個問題,cookie是http協議中的一部分,它的處理過程以下:數據庫

  1)服務器像客戶端發送cookieexpress

      一般採用http協議規定的set-cookie頭操做瀏覽器

      規範規定cookie的格式爲name=value的格式,且必須包含這部分緩存

  2)瀏覽器將cookie保存安全

  3)瀏覽器每次請求時都會將cookie發給服務器服務器

2.sessioncookie

  採用cookie的方式有一個很大的弊端,cookie中的全部數據再客戶端就能夠被修改,很不安全,那麼一些重要的數據就不能存放在cookie中,因而就產生了session.而session中的數據是保存再服務端的,比較安全.session

  session經過一個特殊字段來與瀏覽器的cookie創建鏈接.  

  在express中,這個特殊字段默認是connet.sid.當請求到來時,服務端檢查cookie中保存的connet.sid中的值,並經過這個值與服務器端的session的數據關聯起來.這樣瀏覽器與用戶狀態數據經過connect.sid這個新的字段來關聯,客戶端就沒法修改保存在session中的用戶狀態了.

1)session存放方式

  session的存放方式,分別是存放在:內存,cookie自己,緩存,數據庫(也能夠是文件),其中內存的存放方式適用於開發調試,內存的存放方式不方便進程間的共享,大多數應用都是採用緩存的方式來存儲cookie.也有使用數據庫的方式的,這種方式有一個大的缺點就是速度慢,在小型網站中,好比我的學習項目能夠採用.

2)session的redis存儲

  redis既能夠當作數據庫來使用,也能夠做爲緩存來使用.

express中操做session要用到express-session,這個模塊的使用方法,session(options),其中options中包含的可選參數主要有:

  naem:設置cookie中,保存session的字段名稱(默認爲connect.sid)

  store:session的存儲方式,若是不使用該選項,則默認存放再內存中.

  cookie:設置存放session id的cookie的相關選項,若是不使用該選項,則默認爲:

cookie: 
   { path: '/',    //表示cookie影響的路徑,這裏默認影響全部路徑
     _expires: null,    //時間格式
     originalMaxAge: null,    //cookie保存時間
     httpOnly: true } }  //通常狀況下設置爲true(默認)

  rolling:每個請求都從新設置一個cookie,默認爲false

  resave:及時session沒有被修改,也保存session,默認true

以下再redis中存儲session:

const express = require('express');
const session = require('express-session');
const RedisStore = require('connect-redis')(session);

let app = express()

app.use(session({
  name: "qqqqqq",
  secret: 'wwwww',
  store: new RedisStore({
    host: '127.0.0.1',
    port: 6379
  }), 
  resave: true,
  saveUninitialized: true,
  cookie:{
    'maxAge':6000
  }
}))

 

2)使用mongodb數據庫存儲session,相似redis

const express = require('express')
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
....
app.use(session({
  name: config.session.key,   //設置cookie中保存session id的字段名稱
  secret: config.session.secret,  //經過secret來計算hash值並放在cookie中
  cookie: {
    maxAge: config.session.maxAge //過時時間,過時後cookie中的session id自動刪除
  },  
  store: new MongoStore({ //將session存儲到mongodb
    url: config.mongodb //mongodb地址
  })  
}))
....  
相關文章
相關標籤/搜索