JavaScript(token,cookie)


http 之session和cookie

web安全之token

參考react實現登錄與身份認證

深入了解Cookie

SPA的鑒權方式和傳統的web應用不同:由於頁面的渲染不再依賴服務端,與服務端的交互都通過接口來完成,而REASTful風格的接口提倡無狀態(state less),通常不使用cookie和session來進行身份認證。
比較流行的一種方式是使用web token,所謂的token可以看作是一個標識身份的令牌。客戶端在登錄成功后可以獲得服務端加密后的token,然后在后續需要身份認證的接口請求中在header中帶上這個token,服務端就可以通過判斷token的有效性來驗證該請求是否合法。

1. 基於Token的用戶驗證

  • 客戶端使用用戶名跟密碼請求登錄
  • 服務端收到請求,去驗證用戶名與密碼
  • 驗證成功后,服務端會簽發一個 Token,再把這個 Token 發送給客戶端
  • 客戶端收到 Token 以后可以把它存儲起來,比如放在 Cookie 里或者 Local Storage 里
  • 客戶端每次向服務端請求資源的時候需要帶着服務端簽發的 Token
  • 服務端收到請求,然后去驗證客戶端請求里面帶着的 Token,如果驗證成功,就向客戶端返回請求的數據

2. Cookie如何滿足同源策略

  • 注意: 除了針對具體指定的多個域名發送Cookie 之外,不指定domain 屬性顯得更安全。
    設置 document.domain = ‘baidu.com’

3. 封裝cookie的增刪改查

function setCookie(key, value, iDay) {
    var oDate = new Date();
    oDate.setDate(oDate.getDate() + iDay);

    // Cookie 的expires 屬性指定瀏覽器可發送Cookie 的有效期。當省略expires 屬性時,Cookie僅在瀏覽器關閉之前有效。

    document.cookie = key + '=' + value + ';expires=' + oDate;

}
function removeCookie(key) {
    setCookie(key, '', -1);//這里只需要把Cookie保質期退回一天便可以刪除
}
function getCookie(key) {
    var cookieArr = document.cookie.split('; ');
    for(var i = 0; i < cookieArr.length; i++) {
        var arr = cookieArr[i].split('=');
        if(arr[0] === key) {
            return arr[1];
        }
    }
    return false;
}

4. 關於cookie的web安全方面

  • Cookie 的HttpOnly 屬性是Cookie 的擴展功能,它使JavaScript 腳本無法獲得Cookie。其主要目的為防止跨站腳本攻擊(Cross-sitescripting,XSS)對Cookie 的信息竊取。發送指定HttpOnly 屬性的Cookie 的方法 Set-Cookie: name=value; HttpOnly
  • Cookie 的secure 屬性用於限制Web 頁面僅在HTTPS 安全連接時,才可以發送Cookie。

什么是session

在計算機中,尤其是在網絡應用中,稱為“會話控制”。Session 對象存儲特定用戶會話所需的屬性及配置信息。這樣,當用戶在應用程序的 Web 頁之間跳轉時,存儲在 Session 對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。當用戶請求來自應用程序的 Web 頁時,如果該用戶還沒有會話,則 Web 服務器將自動創建一個 Session 對象。當會話過期或被放棄后,服務器將終止該會話。Session 對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,就可以將該信息存儲在 Session 對象中

打開chrome瀏覽器 => F12 => Application 看到如下圖所示界面
cookie


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM