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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...