cookie 分兩種
- 沒(méi)有設(shè)置expires的被稱為會(huì)話cookie , 保存在內(nèi)存中, 瀏覽器窗口關(guān)閉即銷毀
- 設(shè)置了expires的cookie 保存在硬盤中, 可以在不同的瀏覽器進(jìn)程中共享
cookie 有這樣幾個(gè)特點(diǎn)
- cookie 主要作用是保存用戶信息, 比如存好session id 或者 token 用來(lái)和服務(wù)器保持登錄狀態(tài)
- 設(shè)置httpOnly 保證cookie的安全性, 不被XSS攻擊
- cookie 因?yàn)槊看蝖ttp請(qǐng)求都會(huì)攜帶, 能精簡(jiǎn)則精簡(jiǎn) 總大小不能超過(guò)4kb
- cookie 有效期在 sessionUtils工具中設(shè)置為兩小時(shí) 勾選了自動(dòng)登錄則是一周時(shí)間
cookie有以下分類 ( 常見cookie )
- cookie_connect
- 94字節(jié) 獲取接口數(shù)據(jù)必須的標(biāo)識(shí) 任何鏈接發(fā)起在app.js經(jīng)過(guò)解密發(fā)送給后端
- cookie_userip
- 26字節(jié) 用戶IP, 獲取接口數(shù)據(jù)必須的標(biāo)識(shí) 每次都會(huì)重新獲取 同時(shí)用來(lái)記錄防刷數(shù)據(jù)
- cookie_tokenkey
- 79字節(jié) 登錄令牌 判斷是否登錄
- cookie_userid
- 18字節(jié) 用戶ID標(biāo)識(shí)
- cookie_autokey
- 46字節(jié) 可能設(shè)置為空 是否自動(dòng)登錄
id + token + autokey 共同發(fā)送與服務(wù)器建立session, 每次登錄重設(shè)有效期
- debug_signal
- 15字節(jié) 調(diào)試信號(hào)
- cookie_flag
- 如果沒(méi)有flag, 正常訪問(wèn)頁(yè)面, 不統(tǒng)計(jì)
- cookie_cnt
- 統(tǒng)計(jì)30秒內(nèi) 刷新了幾次
各個(gè)路由里控制廣告浮層的cookie, 均為11字節(jié)左右
-
首頁(yè)
- home_ad_fc 廣告浮層 24小時(shí)
- showIe7_fc IE7瀏覽器提示 24小時(shí)
-
理財(cái)
- bill_fc 活動(dòng)彈窗浮層
-
挖寶藏
- sundayFc 周一到周日只顯示一次
-
娛樂(lè)大廳
- play_ad_fc 廣告浮層
推廣注冊(cè)頁(yè) url : /floor/spread/:id
- cookie_recoms 18字節(jié) 推廣人的ID 用于注冊(cè)時(shí)發(fā)送
還有QQ 登錄綁定功能
還有一些其他站點(diǎn)統(tǒng)計(jì)用cookie (未統(tǒng)計(jì))
代替cookie 的方法
1. Etag 可以應(yīng)用于禁用cookie的頁(yè)面
- 客戶端請(qǐng)求一個(gè)頁(yè)面(A)渐裂。
- 服務(wù)器返回頁(yè)面A,并在給A加上一個(gè)ETag钠惩。 // 告訴瀏覽器要彈窗的截止時(shí)間
- 客戶端展現(xiàn)該頁(yè)面柒凉,并將頁(yè)面連同ETag一起緩存。
- 客戶再次請(qǐng)求頁(yè)面A妻柒,并將上次請(qǐng)求時(shí)服務(wù)器返回的ETag一起傳遞給服務(wù)器扛拨。 // 把彈窗截止時(shí)間發(fā)送回來(lái)
- 正常情況, 服務(wù)器檢查該ETag耘分,并判斷出該頁(yè)面自上次客戶端請(qǐng)求之后還未被修改举塔,直接返回響應(yīng)304(未修改——Not Modified)和一個(gè)空的響應(yīng)體绑警。
- 在廣告浮層業(yè)務(wù)上, 判斷是否達(dá)到截止時(shí)間, 如果到了截止時(shí)間, 就重新設(shè)置etag
var extime = new Date().getTime() + 600000; // 新的過(guò)期時(shí)間, 比如一分鐘后
var reqTime = req.headers['if-none-match'] || 0; // 原來(lái)的過(guò)期時(shí)間
reqTime = Number(reqTime);
if (reqTime !== 0 && reqTime > new Date().
res.setHeader('Etag', reqTime); // 還沒(méi)過(guò)期, 就還設(shè)置原來(lái)的時(shí)間
} else {
// 過(guò)期了
res.setHeader('Etag', extime);
console.log('設(shè)置etag, 過(guò)期時(shí)間是', extime, new Date(extime).getMinutes(), new Date(extime).getSeconds());
}
2. 不能徹底清除的evercookie
https://www.npmjs.com/package/evercookie
這個(gè)插件可以把cookie存在各個(gè)地方(大概8個(gè)), 簡(jiǎn)單禁用cookie和清除是不能清除的
3. 每次請(qǐng)求url加一個(gè)參數(shù)控制廣告浮層
4. localStorage 控制廣告浮層
- localStorage 僅在瀏覽器端保存, 不主動(dòng)參與和服務(wù)器的通信, 用來(lái)保存登錄表示之類的存在安全隱患
- 寫一個(gè)共用js, 進(jìn)入一個(gè)頁(yè)面即取出localStorage循環(huán)遍歷一下對(duì)應(yīng)的key,value
- 如果value已經(jīng)過(guò)期, 那么彈窗
未來(lái)應(yīng)用場(chǎng)景
因?yàn)镠TTP是無(wú)狀態(tài)的協(xié)議
即不能把客戶的本次鏈接與上次鏈接產(chǎn)生聯(lián)系,所以我們需要cookie來(lái)存儲(chǔ)上次鏈接會(huì)話中信息的東西
那么一切有關(guān)用戶信息的數(shù)據(jù), 能增強(qiáng)用戶體驗(yàn)的信息, 都有可能存到 cookie 或 localStorage
- 廣告浮層相關(guān)業(yè)務(wù)
- 用戶的地理位置
- 進(jìn)入頁(yè)面后自動(dòng)跳到上次瀏覽的位置
- 把最大化的窗口變小時(shí)變成用戶手動(dòng)控制過(guò)的窗體寬高信息
- 用戶上次登錄網(wǎng)站的時(shí)間