1.cookie產(chǎn)生
識別用戶
HTTP是無狀態(tài)協(xié)議,這就回出現(xiàn)這種現(xiàn)象:當(dāng)你登錄一個(gè)頁面,然后轉(zhuǎn)到登錄網(wǎng)站的另一個(gè)頁面,服務(wù)器無法認(rèn)識到?;蛘哒f兩次的訪問,服務(wù)器不能認(rèn)識到是同一個(gè)客戶端的訪問,這就讓你重復(fù)登錄,所以產(chǎn)生了cookie。
cookie:第一次訪問一個(gè)服務(wù)器,不攜帶cookie,這時(shí)服務(wù)器在響應(yīng)(response)下行HTTP報(bào)文中,命令瀏覽器攜帶cookie信息;瀏覽器再訪問同一個(gè)域的時(shí)候,將把cookie信息攜帶到請求(request)上行HTTP請求中,從而實(shí)現(xiàn)了HTTP模擬有了狀態(tài)。
2.cookie特點(diǎn)
cookie是不加密的
cookie是可以被篡改和攻擊
cookie大小受到限制
3.node使用
//使用cookie必須要使用cookie-parser中間件
var cookieParser = require('cookie-parser');
app.use(cookieParser());
express中的cookie: res負(fù)責(zé)設(shè)置cookie, req負(fù)責(zé)識別cookie。
cookie用來制作記錄用戶的一些信息,如購買歷史、猜你喜歡、訪問量等
現(xiàn)在看session
4.session產(chǎn)生
由于cookie明文等一些不足所以產(chǎn)生了session
session依賴cookie,就是利用cookie,實(shí)現(xiàn)的“會話”,因此當(dāng)cookie被禁用,session也無法使用。
session比cookie不一樣在哪里呢? session會下發(fā)一個(gè)秘鑰(cookie)(亂碼),客戶端每次訪問都攜帶這個(gè)秘鑰,那么服務(wù)器如果發(fā)現(xiàn)這個(gè)秘鑰吻合,就能夠顯示這個(gè)用戶曾經(jīng)保存的信息。
任何語言中,session的使用,是“機(jī)理透明”的,也就是讓你感覺不到這事兒和cookie有關(guān)
5.session特點(diǎn)和使用
session是加密的
var session = reqiure("express-session");
app.use(session({
? ? ? ? ..一些配置
}));
app.get("/",function(req,res){
console.log(req.sission.login);
});
app.get("/login",function(req,res){
req.session.login = "1";
});
都是req對象
Session存在于服務(wù)器的內(nèi)存中,如果服務(wù)器重啟就會丟失session同時(shí)需要重新登錄
6.cookie和session不同
cookie數(shù)據(jù)存放在客戶的瀏覽器上;session數(shù)據(jù)放在服務(wù)器緩存中。
cookie是明文,不安全,別人利用cookie可以被篡改和攻擊;而session存放服務(wù)器緩存中并且加密的,其他用戶看不到。
session會在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)用戶訪問增多,會比較占用你服務(wù)器內(nèi)存,考慮到減輕服務(wù)器性能方面,使用cookie。
單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie;session的密鑰(cookie),可以對應(yīng)可以對應(yīng)無限大的數(shù)據(jù)
? ?