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中介函式。
接着回应物件(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