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