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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...