iT邦幫忙

0

Node.js學習筆記-02 Cookie與Session

  • 分享至 

  • xImage
  •  

Cookie和Session差別是什麼?

Cookie是瀏覽器中的一個屬性,Cookie的值被伺服器設定了以後,日後瀏覽器的每次請求當中夾帶著這個Cookie值。

Session則是一段時間,一段被伺服器認出使用者狀態的時間。


Cookie與Session的優缺點

Cookie缺點:
用戶端可以完全控制cookie,伺服器傳給用戶端的cookie,用戶都可以被看到,並可以任意刪除、竄改。XSS攻擊有一個技術是惡意的javascript腳本可以修改cookie的內容。cookie不能存入太多資料,會惹惱用戶。

結論: session會比cookie好用,雖然session也是建立在cookie的基礎之上,但session在做法上較為簡單、安全,且不用擔心被濫用。


在Express裡面的cookie
0)為了使Cookie更安全,使用cookie secret,它是一個只被伺服器知道的字串,要把它放到環境檔中。
如果使用Express來開發伺服器端程式碼的話,必須使用cookie-parser中介函式

  1. npm i cookie-parser
  2. const cookieParser = require('cookie'parser')
  3. app.use(cookieParser(process.env.cookieSecret))

接著回應物件(res)就能設定cookie了(cookie的名稱,cookie值,cookie細部設定):

  1. res.cookie('jwt', 'jsonwebtoken')
  2. res.cookie('signed_jwt', 'jsonwebtoken', { signed: true })

伺服器刪除cookie:
res.clearCookie('jwt')

cookie不僅單純是值而已,還能進行設定,以下是設定cookie時可以指定的選項:

  • domain
  • path
  • maxAge : 規定用戶端保留cookie多久。替代方案是使用expires來指定到期日。
  • secure : 規定用戶端用安全傳輸協定(HTTPS)來傳送cookie
  • httpOnly : 最好設定為true,代表cookie只能被伺服器修改,用戶端無法用JavaScript修改,有助於防止XSS攻擊
  • signed : 會將原先規定伺服器存取的是cookies變成伺服器要用signedCookies才能存取

在瀏覽器對伺服器發出請求後,伺服器可以存取請求物件(req)中的cookie屬性值:

  1. const jwt = req.cookies.jwt
  2. const signedjwt = req.signedCookies.signed_jwt

檢查Cookie
打開Chrome按下F12,選擇Application標籤,可以看到左側有個cookies,你會看到有關你正在訪問的網站的所有cookie,你可以刪除它們如果你想要的話XD

在Express裡面的Session

  1. npm i express-session
  2. const expressSession = require('express-session')
  3. app.use(expressSession({組態物件})

組態物件選項 :
* resave
* saveUninitialized
* secret
* key
* story

** 設定session**
req.session.username = 'luke'
** 存取session**
const username = req.session.username
** 刪除session** (使用JavaScript的delete)
delete req.session.username


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言