cookie ,localStorage 及其他代替方案

cookie 分兩種

  1. 沒有設置expires的被稱為會話cookie , 保存在內存中, 瀏覽器窗口關閉即銷毀
  2. 設置了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的頁面

  1. 客戶端請求一個頁面(A)。
  2. 服務器返回頁面A,并在給A加上一個ETag。 // 告訴瀏覽器要彈窗的截止時間
  3. 客戶端展現(xiàn)該頁面,并將頁面連同ETag一起緩存。
  4. 客戶再次請求頁面A,并將上次請求時服務器返回的ETag一起傳遞給服務器。 // 把彈窗截止時間發(fā)送回來
  5. 正常情況, 服務器檢查該ETag,并判斷出該頁面自上次客戶端請求之后還未被修改,直接返回響應304(未修改——Not Modified)和一個空的響應體。
  6. 在廣告浮層業(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 控制廣告浮層

  1. localStorage 僅在瀏覽器端保存, 不主動參與和服務器的通信, 用來保存登錄表示之類的存在安全隱患
  2. 寫一個共用js, 進入一個頁面即取出localStorage循環(huán)遍歷一下對應的key,value
  3. 如果value已經過期, 那么彈窗

未來應用場景

因為HTTP是無狀態(tài)的協(xié)議

即不能把客戶的本次鏈接與上次鏈接產生聯(lián)系,所以我們需要cookie來存儲上次鏈接會話中信息的東西

那么一切有關用戶信息的數(shù)據, 能增強用戶體驗的信息, 都有可能存到 cookie 或 localStorage

  • 廣告浮層相關業(yè)務
  • 用戶的地理位置
  • 進入頁面后自動跳到上次瀏覽的位置
  • 把最大化的窗口變小時變成用戶手動控制過的窗體寬高信息
  • 用戶上次登錄網站的時間
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容