koa2如何設定和清除cookie?
推薦一部電影,非常公寓,1996年愛情懸疑片,特好看。
再吐槽一句,還有好長的路要走啊...
言歸正傳!
先看一個很關鍵的問題。
問:
cookie與cookie中的session是什麼?
答:
cookie是一種報文頭資訊,請求報文和響應報文中都可以有cookie,key-value的形式,主要用來識別使用者身份。
cookie中的session是指會話,瀏覽器會話是指瀏覽器與伺服器建立一次會話,關閉瀏覽器使得會話結束,此時session與cookie同時失效。與cookie有關的session,是指expires,預設為session,也就是cookie有效期,會話結束cookie失效。
樸靈大神的《深入淺出nodejs》中對cookie進行了很精闢的講解:
由於HTTP是無狀態協議,所以需要cookie來區分使用者之間的身份。最新規範RFC6265中,定義cookie是一個由瀏覽器和伺服器共同協作實現的規範。
Cookie的處理分為以下幾步:
1.伺服器向客戶端傳送cookie(我說怎麼前端很少會用到cookie...)
2.瀏覽器將Cookie儲存(後端設定expires或者maxAge,cookie有效期由後端來決定,預設為session)
3.之後每次瀏覽器都會講Cookie發向伺服器。(有效期內是這樣)
客戶端傳送的Cookie在請求報文的Cookie欄位中,我們可以使用curl來構造這個欄位,如下所示:
curl -v -H "Cookie:foo=bar;baz=val" "http://127.0.0.1:1337/path?foo=bar&foo=baz"
構建失敗,不過由此催生出一個有趣的問題。
1.後端如何生成cookie(後端原生nodejs)
搭建一個http伺服器,並且手動生成cookie,儲存到瀏覽器。
var http = require('http')
http.createServer(function(req,res){
res.setHeader('Set-Cookie',['name=frank','age=23'])
res.writeHead(400,{'Content-Type':'text/plain'});
res.end('Hello World\n')
}).listen(1337,'127.0.0.1')
expires/Max-Age 欄位為此cookie超時時間。若設定其值為一個時間,那麼當到達此時間後,此cookie失效。不設定的話預設值是Session,意思是cookie會和session一起失效。當瀏覽器關閉(不是瀏覽器標籤頁,而是整個瀏覽器) 後,此cookie失效。
2.瀏覽器如何將cookie儲存?(根據後端設定決定儲存與否,需要在cookie有效期內)
根據expires/MAX-AGE來儲存。
現在的cookie生存週期只是一個session,也就是整個瀏覽器會話(單個tab標籤頁關閉Cookie依舊儲存)
首次建立會話,只有response headers中有cookie.
第二次建立會話,request headers中也有cookie
3.如何設定expires?(後端設定,koa2,基於cookie.js模組)
可能需要依賴redis,可能需要 koa2。
先不管redis,使用koa2來修改cookie有效時間。先嚐試原生方式,沒有原生方式。
koa2方式成功。
cookie有效期已經不再是session了。
程式碼如下:
const setCookie = ctx => {
data = ctx.request.body;
ctx.response.body = "Cookie設定成功"
ctx.cookies.set('name', 'frank', { signed: true ,maxAge:7200000});
ctx.cookies.set('age', 23, { signed: true ,maxAge:7200000});
ctx.body = 'Hello World';
};
app.use(route.get('/set', setCookie))
既然設定了cookie,伺服器如何清除cookie呢?
我們清除的是瀏覽器上的cookie,讓cookie過期就好。
設定cookie的值為空,並且設定cookie的maxAge為0,或者Expires設定為當前時間前的一個時間,例如當前時間1毫秒前Date.now()-1。
koa2框架清除cookie的具體操作程式碼為:
const deleteCookie = ctx =>{
ctx.response.body = "Cookie刪除成功"
ctx.cookies.set('name','',{signed:false,maxAge:0})
ctx.cookies.set('age','',{signed:false,maxAge:0})
ctx.body = "Hello orld"
}
app.use(route.get('/delete',deleteCookie)
完整的koa2設定cookie,清除cookie程式碼示例如下:
const koa = require('koa');
const app = new koa();
app.keys = ['im a newer secret', 'i like turtle'];
// app.keys = new KeyGrip(['im a newer secret', 'i like turtle'], 'sha256');
const route = require('koa-route');
const setCookie = ctx => {
data = ctx.request.body;
ctx.response.body = "Cookie設定成功"
ctx.cookies.set('name', 'frank', { signed: true ,maxAge:7200000});
ctx.cookies.set('age', 23, { signed: true ,maxAge:7200000});
ctx.body = 'Hello World';
};
app.use(route.get('/set', setCookie))
const deleteCookie = ctx =>{
ctx.response.body = "Cookie刪除成功"
ctx.cookies.set('name','',{signed:false,maxAge:0})
ctx.cookies.set('age','',{signed:false,maxAge:0})
ctx.body = "Hello orld"
}
app.use(route.get('/delete',deleteCookie))
app.listen(3000);
That it !
相關文章
- 如何設定cookie和刪除cookieCookie
- 如何設定CookieCookie
- postman如何設定cookiePostmanCookie
- cookie清除Cookie
- 設定cookie和查詢cookie的方法Cookie
- 新增cookie、刪除cookie、清除cookieCookie
- cookie的設定Cookie
- WKWebView 設定CookieWebViewCookie
- cookie的設定、獲取和刪除Cookie
- javascript 對cookie的讀取和設定JavaScriptCookie
- 如何清除Safari,Chrome和Firefox中的快取,歷史記錄和CookieChromeFirefox快取Cookie
- js清除所有的cookieJSCookie
- cookie設定值--jsCookieJS
- Mac電腦如何設定自動清除廢紙簍?Mac
- Cookie設定HttpOnly屬性CookieHTTP
- python flask 設定cookiePythonFlaskCookie
- Mac新手教程:Mac廢紙簍如何設定自動清除?Mac
- Python Flask,cookie,設定、獲取、刪除cookiePythonFlaskCookie
- javascript設定和獲取cookie值程式碼例項JavaScriptCookie
- JavaScript設定cookie立即過期JavaScriptCookie
- JavaScript設定cookie永不過期JavaScriptCookie
- web.py cookie使用之cookie設定與獲取WebCookie
- JavaScript 設定cookie 過期時間JavaScriptCookie
- 瀏覽器手動設定Cookie瀏覽器Cookie
- 谷歌瀏覽器檢視和手動設定cookie的值谷歌瀏覽器Cookie
- C語言 僅用位設定和位清除表示位運算C語言
- 利用js裡的Dom和Date,自定義cookie的前端設定方法JSCookie前端
- javascript如何建立和讀取cookieJavaScriptCookie
- 看我如何用定值 Cookie 實現反爬Cookie
- 純生JS輪播,定時器新增和清除定時器JS定時器
- JavaScript 設定Cookie過期時間無效JavaScriptCookie
- 使用PURGEOLDEXTRACTS設定goldengate自動清除trail fileGoAI
- 用flask開發個人部落格(7)—— flask中設定和獲取cookieFlaskCookie
- Postman設定自動捕獲傳遞Cookie教程PostmanCookie
- javascript設定cookie立即過期程式碼例項JavaScriptCookie
- javascript設定或者獲取cookie程式碼例項JavaScriptCookie
- Android Studio 設定自動清除無效 importAndroidImport
- 如何實現點選文字清除預設文字