- Cookie是存在瀏覽器的一段字符串(最大5KB)
- 跨域不共享
- 格式:k1=v1;k2=v2;k3=v3; 因此可以儲存結構化數(shù)據(jù)
- 每次發(fā)送http請求浴井,會將請求域的cookie一起發(fā)送給server
- server可以修改cookie熟掂,并且返回給瀏覽器
- 瀏覽器也可以通過Javascript修改cookie(有限制)
客戶端通過Javascript查看/修改Cookie
- 查看cookie的三種方式
- 通過瀏覽器控制臺中的
Network
面板氓英,查看請求杨伙,在Request Headers
中的Cookie
代表著客戶端發(fā)送給服務器的Cookie秘遏;在Response Headers
的Set-Cookie
中表示服務器將Cookie
重新設置后枢步,又返回給了客戶端 - 通過
Application
面板的Cookies
可以查看當前瀏覽器中保存的解析后的各個域中的Cookie儡司。 - 通過Javascript的
document.cookie
對象訪問Cookie
- 通過瀏覽器控制臺中的
- 修改Cookie的方式
- 通過
document.cookie
對cookie進行修改娱挨; - 通過各種JS庫操作Cookie
- 通過
隨著HTML5,localStorage和sessionStorage捕犬,已經(jīng)很少再去通過Javascript修改Cookie跷坝,作為客戶端數(shù)本地數(shù)據(jù)存儲的途徑了酵镜。
Server端NodeJS操作Cookie
查看Cookie
在NodeJS中可以通過req.headers.cookie
訪問到原始的cookie字符串(k1=v1;k2=v2;
),在這個基礎上對cookie進行組裝和解析修改Cookie
通過NodeJS的res.setHeader()
函數(shù)來重寫cookie并返回給客戶端,格式如下res.setHeader('Set-Cookie', ['key1=value1', 'path=/'])
(ps: 還可以將使用res.setHeader('Set-Cookie', 'key1=value1;key2=value2')
柴钻,通過一個字符串設置多條cookie的值淮韭,但是很多瀏覽器不支持這種方式,包括chrome)-
限制Cookie
- 通過在
Set-Cookie
中設置expires
贴届,限制Cookie的過期時間靠粪; - 通過在
Set-Cookie
中設置path
,限制Cookie的作用范圍毫蚓; - 通過在
Set-Cookie
中設置httpOnly
占键,用來屏蔽在客戶端通過Javascript訪問和修改Cookie,從而提高系統(tǒng)安全性元潘。
- 通過在
綜合示例
let http = require('http')
let app = http.createServer((req, res) => {
// 服務器端讀取cookie
req.cookie = {}
let cookies = req.headers.cookie ? req.headers.cookie.split(';') : []
if (cookies.length > 0) {
cookies.forEach(item => {
if (item) {
let cookieArray = item.split('=')
if (cookieArray && cookieArray.length > 0) {
let key = cookieArray[0].trim()
let value = cookieArray[1] ? cookieArray[1].trim() : undefined
req.cookie[key] = value
}
}
})
}
// 服務器端設置cookie
res.setHeader('Set-Cookie', `key1=value1;httpOnly;expires=${getExpireTime()}`)
res.end(
JSON.stringify(req.cookie)
)
})
app.listen(3000, () => {
console.log('running on 3000')
})
function getExpireTime () {
let d = new Date()
d.setTime(d.getTime() + 15 * 60 * 1000)
return d.toUTCString()
}