Node.js学习笔记-02 Cookie与Session

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中介函式。

npm i cookie-parserconst cookieParser = require('cookie'parser')app.use(cookieParser(process.env.cookieSecret))

接着回应物件(res)就能设定cookie了(cookie的名称,cookie值,cookie细部设定):

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

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

cookie不仅单纯是值而已,还能进行设定,以下是设定cookie时可以指定的选项:

domainpathmaxAge : 规定用户端保留cookie多久。替代方案是使用expires来指定到期日。secure : 规定用户端用安全传输协定(HTTPS)来传送cookiehttpOnly : 最好设定为true,代表cookie只能被伺服器修改,用户端无法用JavaScript修改,有助于防止XSS攻击signed : 会将原先规定伺服器存取的是cookies变成伺服器要用signedCookies才能存取

在浏览器对伺服器发出请求后,伺服器可以存取请求物件(req)中的cookie属性值:

const jwt = req.cookies.jwtconst signedjwt = req.signedCookies.signed_jwt

检查Cookie
打开Chrome按下F12,选择Application标籤,可以看到左侧有个cookies,你会看到有关你正在访问的网站的所有cookie,你可以删除它们如果你想要的话XD

在Express里面的Session

npm i express-sessionconst expressSession = require('express-session')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


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章