Cookie會話跟蹤技術

来源:https://www.cnblogs.com/toweiwei/archive/2022/08/09/16567317.html
-Advertisement-
Play Games

cookie是什麼 cookie 也叫 HTTPCookie,是客戶端與伺服器端進行會話(session)使用的一個能夠在瀏覽器本地化存儲的技術。 cookie就是為了存儲 sessionID而誕生. cookie的特性,會隨著請求自動攜帶cookie的值到伺服器 cookie的作用 cookie的 ...


 cookie是什麼

cookie 也叫 HTTPCookie,是客戶端與伺服器端進行會話(session)使用的一個能夠在瀏覽器本地化存儲的技術。 cookie就是為了存儲 sessionID而誕生. cookie的特性,會隨著請求自動攜帶cookie的值到伺服器

 cookie的作用

cookie的作用主要是在瀏覽器存儲少量數據, 利用cookie我們可以實現一些保存數據的功能. 比如: 1, 用戶登錄的記住密碼功能(下次再訪問網站時無需輸入密碼了); 2, 購物車,加入購物車的商品沒有及時付款,使用cookie保存後, 可以在一定時間後再訪問網站, 會發現購物車裡還有之前的商品列表; 3.存儲一些小的數據  4k

網路構成圖

網路構成分為七層 最底層的物理層 數據鏈路層(底層維護 需要硬體支持),網路層(基於網路協議白皮書書寫網路協議),傳輸層(網路傳輸的支持 tcp(直連)和udp(丟包)) 應用層相關協議(對應應用支持的協議 http網路傳輸協議 ftp文件傳輸協議 SNMP郵件傳輸協議)

 

 

 

http和https

http,https 都是網路傳輸協議 是用於網路相關傳輸,http走的是明文傳輸,https走的密文傳輸(內部採用對稱加密以及非對稱加密)。對應的https安全性要高於http。https為什麼會採用加密,因為他底層採用了openSSL。(open表示開源)

http的特性

  • 無狀態 (伺服器不知道是誰訪問的我)

  • 無連接 (不會建立完整的連接 訪問一過去 數據一返回連接就斷了)

  • 長連接 (連接可以建立長時間)

  • 短連接 (連接對應的內容很短)

問題

由於http是無狀態的!那麼對應的我們在實現某些功能的時候就會出現對應的問題.比如a用戶登錄了 b用戶也登錄了,a用戶可能拿到b用戶的頁面,b用戶可以拿到a用戶的頁面。這個時候我們就出現問題了。

問題的解決

根據上面的問題我們可以得出對應的a可能會拿到b的內容,原因是因為對應的伺服器無法區分a和b,如果我在a的訪問的時候給一個唯一的標識,在b的訪問的時候給一個唯一的標識,那麼我是否可以區分a和b。所以對應的解決方案就是a和b擁有不一樣的標識,而這個標識是在建立連接的時候。這個標識叫做sessionId。也就意味這個每個請求去建立連接都會獲得一個sessionId。(sessionID服務端給的)。如果對應的sessionID是存儲於服務端的話,那麼服務端就會越來越大從影響對應的效率,所以我們誕生了一個內容來保存這個值到對應瀏覽器端,這個東西就是cookie。所以cookie的誕生就是為了保存sessionID,從而解決http無狀態的問題。

cookie

概述

  • cookie存在於瀏覽器端

  • cookie為了保存sessionID出現的

  • cookie的出現解決了http無狀態的問題  

特性

  • cookie是不安全的
  • cookie是可以被篡改和偽造的
  • cookie他是以字元串存儲的(單一),有很多的數據類型是不支持的(二進位圖片,二進位的視頻,base64碼的視頻等等)
  • cookie他的大小不能超過4kb(大小隻有4kb 容量小)
  • cookie會隨請求發送
  • cookie可以跨域(domain來設置)

cookie的訪問

//document.cookie
console.log(document.cookie)

cookie的完整格式

name=value;[expires=date];[path=路徑];[domain=功能變數名稱];[secure]

name隨便定value隨便定(存的key和value)

document.cookie = 'username=jack'

expires 過期時間設置 (如果沒有設置 跟sessionID的過期時間一致 連接一斷就沒有了)

var date = new Date(2022,7,9,16,20)
document.cookie = 'username=jack;expires='+date

path 只有是這個路徑以下的url才攜帶這個cookie

document.cookie = 'username=jack;expires='+date+';path=http://www.baidu.com'

domain 跨域設置 在這個功能變數名稱下實現了跨域的功能

document.cookie = 'username=jack;expires='+date+';path=http://www.baidu.com;domain=www.baidu.com'

secure 安全 只有當前訪問協議是https的時候才會攜帶

document.cookie = 'username=jack;expires='+date+';path=http://www.baidu.com;domain=www.baidu.com;secure'

cookie的相關操作(增刪改查的功能)

cookie的封裝
//主要是封裝的cookie的增刪改查的方法
//根據key來獲取cookie裡面的元素
// password=123456; username=123456
function getItem(key){
   var str =  document.cookie
   //對於這個字元串進行切割
   var splitArr = str.split(';') //[password=123456,username=123456]
   var cookieObject = {}
   //遍歷這個數組
   for(var splitStr of splitArr){//password=123456
        var keyValueArr = splitStr.split('=')
        cookieObject[keyValueArr[0].trim()] = decodeURIComponent(keyValueArr[1])
   }
   return cookieObject[key]
}
//設置cookie及裡面的元素
function setItem(key,value,expires,path,domain,secure){
    //如果沒有key獲取沒有value 直接報錯
    if(!key || (!value && value!='')){
        //拋出錯誤 後面的代碼將不會執行
        throw new Error('參數錯誤')
    }
    document.cookie = `${key}=${encodeURIComponent(value)}`
    if(expires){//如果有過期時間拼接
        document.cookie += `;expires=${expires}`
    }
    if(path){//如果有路徑拼接
        document.cookie += `;path=${path}`
    }
    if(domain){//如果有domain拼接
        document.cookie += `;domain=${domain}`
    }
    if(secure){//如果有secure拼接
        document.cookie += `;${secure}`
    }
}
//根據key來刪除對應的cookie
function removeItem(key){
    if(getItem(key) || getItem(key)==''){
        setItem(key,'',new Date())
    }else{
        console.error('當前的key值不存在')
    }
}

cookie.js(第三方的js)

Cookies.remove('username')
Cookies.get('username')
Cookies.set('username','jack',{expires:10}) //設置一個username 10天以後過期
encodeURIComponent 轉碼
console.log(encodeURIComponent('{abdejde152}'));
decodeURIComponent 解碼
var str = encodeURIComponent('{abdejde152}') //進行編碼
console.log(decodeURIComponent(str));//解碼

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 7月28日,以“數智進化,現在即未來”為主題的袋鼠雲2022產品發佈會於線上正式開幕。發佈會上,袋鼠雲宣佈將集團進行全新升級:從“數字化基礎設施供應商”,升級為“全鏈路數字化技術與服務提供商”,併發布了全新的四大產品體系:數據智能分析與洞察平臺“數雁EasyDigit”、低代碼數字孿生平臺EasyV ...
  • 前言: 今天有個業務需求,需要將用戶的密碼統一進行設置,現在只有用戶的昵稱(nickname), 用戶的username跟password欄位為空。遂就用到了中文轉拼音~ 1、先將nickname轉拼音並賦值給username欄位 2、使用username欄位配合加密函數,對該用戶的密碼進行賦值 - ...
  • 好消息!國際權威行業研究與咨詢機構Forrester發佈全球Translytical數據平臺廠商選型報告《The Translytical Data Platforms Landscape, Q3 2022》,騰訊雲資料庫成功入選。 Forrester是全球最具影響力的獨立第三方研究咨詢公司之一,提 ...
  • 有讀者可能會一臉懵逼? 啥是索引潛水? 你給起的名字的嗎?有沒有索引蛙泳? 這個名字還真不是我起的,今天要講的知識點就叫索引潛水(Index dive)。 先要從一件怪事說起: ...
  • 定義: 刪除數據表就是將資料庫中已經存在的表從資料庫中刪除。註意,在刪除表的同時,表的定義和表中所有的數據均會被刪除。因此,在進行刪除操作前,最好對錶中的數據做一個備份,以免造成無法輓回的後果。本節將詳細講解資料庫表的刪除方法。 1 刪除一個或多個沒有被其他表關聯的數據表 如果一個數據表沒有和其它表 ...
  • 一.自定義組件 1.1 組件的創建與引用 首先創建組件 然後我們組件的引用分為局部和全局引用 局部引用就是在當前頁面能使用,在當前頁面的json文件裡面配置 全局引用同樣的道理,==註意跟page等是同級的== 組件與頁面的不同: 雖然都有相應的四個文件 1.2 組件樣式 首先,預設情況下 ==組件 ...
  • 疫情期間,很多線下活動轉為線上舉行,實時音視頻的需求劇增,在視頻會議,線上教育,電商購物等眾多場景成了“生活新常態”。 本文將教你如何通過即構ZEGO 音視頻 SDK 在Android端搭建實時視頻通話能力。即構音視頻SDK提供100+種行業解決方案,RTC 每月贈送10000分鐘免費時長,提供免費 ...
  • 誰說程式員不懂浪漫? 作為程式員,用自己的代碼本事手搓一個技術感十足的驚喜,我覺得,這是不亞於車馬慢時代手寫信的古典主義浪漫。 那麼,應該怎樣創作出具有自我身份屬性的浪漫驚喜呢? 玩法很多,今天給大家介紹一個不出錯的技術控浪漫實操方式——煙花粒子動畫,在虛擬空間為對方造一個漫天煙花,平行時空的浪漫, ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...