cookie和session的區別及原理

Cookie概念
在瀏覽某些 網站 時,這些網站會把 一些數據存在 客戶端 , 用于使用網站 等跟蹤用戶,實現用戶自定義 功能.
是否設置過期時間:
如果不設置 過期時間,則表示這個 Cookie生命周期為 瀏覽器會話期間 , 只要關閉瀏覽器,cookie就消失了.
這個生命期為瀏覽會話期的cookie,就是會話Cookie;

存儲: 一般保存在 內存,不在硬盤;
如果設置了過期時間, 瀏覽器會把cookie保存在硬盤上,關閉再打開瀏覽器, 這些cookie 依然有效直到 超過的設置過期時間;
存儲在硬盤上的Cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。
而對于保存 在內存的Cookie,不同的瀏覽器有不同的處理方式。

原理:
如果瀏覽器使用的是 cookie,那么所有的數據都保存在瀏覽器端,

比如你登錄以后,服務器設置了 cookie用戶名(username),那么,當你再次請求服務器的時候,瀏覽器會將username一塊發送給服務器,這些變量有一定的特殊標記。
服 務器會解釋為 cookie變量。

所以只要不關閉瀏覽器,那么 cookie變量便一直是有效的,所以能夠保證長時間不掉線。
如果你能夠截獲某個用戶的 cookie變量,然后偽造一個數據包發送過去,那么服務器還是認為你是合法的。所以,使用 cookie被攻擊的可能性比較大。

如果設置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發送給服務器。

如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的 cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網站的時候就是用你的的身份登錄的。
所以 cookie是可以偽造的。

當然,偽造的時候需要主意,直接copy cookie文件到 cookie目錄,瀏覽器是不認的,
他有一個index.dat文件,存儲了 cookie文件的建立時間,以及是否有修改,所以你必須先要有該網站的 cookie文件,并且要從保證時間上騙過瀏覽器,

曾經在學校的vbb論壇上面做過試驗,copy別人的 cookie登錄,冒用了別人的名義發帖子,完全沒有問題。

cookie 用法:
setcookie(“user”,“zy”,time()+3600); 設置user為zy,一小時之后失效;
$_COOKIE[‘user’]; 取回user值(名字)
setcookie(“user”,"",time()-3600); 刪除cookie,第二個參數為空,第三個時間設置為小于系統的當前時間即可.

或在瀏覽器設置
在使用Cookie時,Cookie自動生成一個文本文件存儲在IE瀏覽器的Cookie臨時文件夾中,應用瀏覽器刪除Cookie文件的具體操作步驟為
選擇IE瀏覽器中的工具/internet選項命令,打開Internet選項對話框,
在常規選項卡中單擊刪除Cookie按鈕,在彈出的對話框中單擊確定按鈕,即可成功刪除全部Cookie文件.

Session的概念
Session 是存放在服務器端的類似于HashTable結構(每一種web開發技術的實現可能不一樣,下文直接稱之為HashTable)來存放用戶數據;
作用:實現網頁之間數據傳遞,是一個存儲在服務器端的對象集合。

原理:當用戶請求一個Asp.net頁面時,系統將自動創建一個Session;退出應用程序或關閉服務器時,該Session撤銷。系統在創建Session時將為其分配一個長長的字符串標識,以實現對Session進行管理與跟蹤。

session機制是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。

保存:
存儲在Server段的內存進程中的,而這個進程相當不穩定,經常會重啟,這樣重啟的話,就會造成Session失效,用戶就必須要重新登錄,用戶體驗相當差,比如用戶在填寫資料,快要結束的時候Session失效,直接跳到登錄頁面;

是否已經創建過session
當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),

如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來…使用(檢索不到,會新建一個),

如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,

session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。

(總結: 創建一個session時,服務器看這個客戶端 是否包含session標識, 是的話按照session id把session檢索出來,否則就得 新建一個.)

Session的客戶端實現形式(即Session ID的保存方法):
一般瀏覽器提供了兩種方式來保存,還有一種是程序員使用html隱藏域的方式自定義實現:

[1] 使用Cookie來保存,這是最常見的方法,本文“記住我的登錄狀態”功能的實現正式基于這種方式的。

服務器通過設置Cookie的方式將Session ID發送到瀏覽器。
如果我們不設置這個過期時間,那么這個Cookie將不存放在硬盤上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就丟失了。
如果我們設置這個時間為若干天之后,那么這個Cookie會保存在客戶端硬盤中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應網站時,同 樣會發送到服務器上。

[2] 使用URL附加信息的方式,也就是像我們經常看到JSP網站會有aaa.jsp?JSESSIONID=*一樣的。這種方式和第一種方式里面不設置Cookie過期時間是一樣的。(URL重寫,就是把session id直接附加在URL路徑的后面。)

[3] 第三種方式是在頁面表單里面增加隱藏域,這種方式實際上和第二種方式一樣,只不過前者通過GET方式發送數據,后者使用POST方式發送數據。但是明顯后者比較麻煩。

表單隱藏字段就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如:

<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
1
2
3
4
實際上這種技術可以簡單的用對action應用URL重寫來代替。
session 用法:
用戶信息保存到session前,先啟動;
session_start(); 啟動session
$ &_SESSION[‘user’]=“zy”; 設置用戶名
unset($_SESSION[‘user’]); 銷毀用戶名
session_destory(); 失去已經存儲的session的數據

cookie 和session 的區別:

1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上.

簡單的說,當你登錄一個網站的時候,如果web服務器端使用的是session,那么所有的數據都保存在服務器上面,

客戶端每次請求服務器的時候會發送 當前會話的session_id,服務器根據當前session_id判斷相應的用戶數據標志,以確定用戶是否登錄,或具有某種權限。

由于數據是存儲在服務器 上面,所以你不能偽造,但是如果你能夠獲取某個登錄用戶的session_id,用特殊的瀏覽器偽造該用戶的請求也是能夠成功的。

session_id是服務 器和客戶端鏈接時候隨機分配的,一般來說是不會有重復,但如果有大量的并發請求,也不是沒有重復的可能性,我曾經就遇到過一次。

登錄某個網站,開始顯示的 是自己的信息,等一段時間超時了,一刷新,居然顯示了別人的信息。
Session是由應用服務器維持的一個服務器端的存儲空間,用戶在連接服務器時,會由服務器生成一個唯一的SessionID,用該SessionID 為標識符來存取服務器端的Session存儲空間。而SessionID這一數據則是保存到客戶端,用Cookie保存的,用戶提交頁面時,會將這一 SessionID提交到服務器端,來存取Session數據。這一過程,是不用開發人員干預的。所以一旦客戶端禁用Cookie,那么Session也會失效。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session。

3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能考慮到減輕服務器性能方面,應當使用COOKIE。

4、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。(Session對象沒有對存儲的數據量的限制,其中可以保存更為復雜的數據類型)

注意:
session很容易失效,用戶體驗很差;
雖然cookie不安全,但是可以加密 ;
cookie也分為永久 和暫時 存在的;
瀏覽器 有禁止cookie功能 ,但一般用戶都不會設置;
一定要設置失效時間,要不然瀏覽器關閉就消失了;
例如:
記住密碼功能就是使用永久cookie寫在客戶端電腦,下次登錄時,自動將cookie信息附加發送給服務端。
application是全局性信息,是所有用戶共享的信息,如可以記錄有多少用戶現在登錄過本網站,并把該信息展示個所有用戶。
兩者最大的區別在于生存周期,一個是IE啟動到IE關閉.(瀏覽器頁面一關 ,session就消失了)
一個是預先設置的生存周期,或永久的保存于本地的文件。(cookie)
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36216.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

其他行業跳槽轉入計算機領域簡單看法

其他行業跳槽轉入計算機領域簡單看法 本人選擇從以下幾個方向談談自己的想法和觀點。 如何規劃才能實現轉碼 自我評估和目標設定&#xff1a;首先&#xff0c;你需要評估自己的技能和興趣&#xff0c;確定你希望在計算機領域從事的具體職位或領域。這有助于你更好地規劃學習路…

深入了解 Rancher Desktop 設置

Rancher Desktop 設置的全面概述 Rancher Desktop 擁有方便、強大的功能&#xff0c;是最佳的開發者工具之一&#xff0c;也是在本地構建和部署 Kubernetes 的最快捷方式。 本文將介紹 Rancher Desktop 的功能和特性&#xff0c;以及 Rancher Desktop 作為容器管理平臺和本地…

人工智能原理(2)

目錄 一、知識與知識表示 1、知識 2、知識表示 3、知識表示方法 二、謂詞邏輯表示法 1、命題邏輯 2、謂詞邏輯 三、產生式表達法 1、知識的表示方法 2、產生式系統組成 3、推理方式 4、產生式表示法特點 四、語義網絡 1、概念及結構 2、語義網絡的基本語義聯系 …

zookeeper案例

目錄 案例一&#xff1a;服務器動態上下線 服務端&#xff1a; &#xff08;1&#xff09;先獲取zookeeper連接 &#xff08;2&#xff09;注冊服務器到zookeeper集群&#xff1a; &#xff08;3&#xff09;業務邏輯&#xff08;睡眠&#xff09;&#xff1a; 服務端代碼…

Java+Excel+POI+testNG基于數據驅動做一個簡單的接口測試【杭州多測師_王sir】

一、創建一個apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的對應目錄下放入features和plugins&#xff0c;重啟eclipse就可以看到testNG了 <!--poi excel解析 --><d…

運維監控學習筆記3

DELL的IPMI頁面的登錄&#xff1a; 風扇的狀態&#xff1a; 電源溫度&#xff1a;超過70度就告警&#xff1a; 日志信息&#xff1a; 可以看到更換過磁盤。 iDRAC的設置 虛擬控制臺&#xff1a;啟動遠程控制臺&#xff1a; 可以進行遠程控制。 機房工程師幫我們接遠程控制&…

【云原生】kubernetes中容器的資源限制

目錄 1 metrics-server 2 指定內存請求和限制 3 指定 CPU 請求和限制 資源限制 在k8s中對于容器資源限制主要分為以下兩類: 內存資源限制: 內存請求&#xff08;request&#xff09;和內存限制&#xff08;limit&#xff09;分配給一個容器。 我們保障容器擁有它請求數量的…

【云原生】K8S集群

目錄 一、調度約束1.1 POT的創建過程1.1調度過程 二、指定節點調度2.1 通過標簽選擇節點 三、親和性3.1requiredDuringSchedulingIgnoredDuringExecution&#xff1a;硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution&#xff1a;軟策略3.3Pod親和性與反親和性3.4使…

(2)原神角色數據分析-2

功能一&#xff1a; 得到某個屬性的全部角色&#xff0c;將其封裝在class中 """各元素角色信息&#xff1a;一對多""" from pandas import DataFrame, Series import pandas as pd import numpy as npclass FindType:# 自動執行&#xff0c;將…

山東布谷科技直播平臺搭建游戲開發技術分享:數據存儲的重要意義

在市場上的熱門的直播平臺中&#xff0c;有很多小程序為用戶提供各種各樣的功能&#xff0c;這其中就有很多游戲小程序&#xff0c;當今社會獨生子女眾多&#xff0c;很多作為獨生子女的用戶都會去選擇一個能夠社交互動的APP來填補內心的空虛&#xff0c;而直播平臺的實時互動的…

SAP 選擇屏幕組件名描述翻譯時字符長度不夠問題處理

問題&#xff1a;有時候我們在開發report程序的時候&#xff0c;要求程序顯示支持中英文&#xff0c;如果程序是在中文環境下開發的時候&#xff0c;需要進行翻譯處理&#xff0c;但是我們發現選擇屏幕上的組件的描述支持的默認長度是30位&#xff0c;如果超過該如何處理呢 解…

《路由與交換技術》讀書筆記

小小感悟 工作近3年&#xff0c;基本沒去看路由交換相關書籍&#xff0c;趁著搬家后&#xff0c;周末閑暇時間&#xff0c;快速看了一遍《路由與交換技術》&#xff0c;溫習了一遍&#xff0c;很有收獲&#xff0c;以后還是要多花時間看看其他類型的書。 讀書筆記 1.1 移動通…

構建一個LLM應用所需的所有信息

一、說明 您是否對大型語言模型&#xff08;LLM&#xff09;的潛力感興趣&#xff0c;并渴望創建您的第一個基于LLM的應用程序&#xff1f;或者&#xff0c;也許您是一位經驗豐富的開發人員&#xff0c;希望簡化工作流程&#xff1f;看看DemoGPT就是您的最佳選擇。該工具旨在簡…

【軟件測試】Linux環境下Docker搭建+Docker搭建MySQL服務(詳細)

目錄&#xff1a;導讀 前言 一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 Linux之docker搭…

CDN(內容分發網絡)

CDN的全稱是 Content Delivery Network, 即內容分發網絡。CDN是構建在現有網絡基礎之上的智能虛擬網絡&#xff0c;依靠部署在各地的邊緣服務器&#xff0c;通過中心平臺的負載均衡、內容分發、調度等功能模塊&#xff0c;使用戶就近獲取所需內容&#xff0c;降低網絡擁塞&a…

詳談MongoDB的那些事

概念區分 什么是關系型數據庫 關系型數據庫&#xff08;Relational Database&#xff09;是一種基于關系模型的數據庫管理系統&#xff08;DBMS&#xff09;。在關系型數據庫中&#xff0c;數據以表格的形式存儲&#xff0c;表格由行和列組成&#xff0c;行表示數據記錄&…

神秘的ip地址8.8.8.8,到底是什么類型的DNS服務器?

下午好&#xff0c;我的網工朋友。 DNS&#xff0c;咱們網工配置網絡連接或者路由器時&#xff0c;高低得和這玩意兒打交道吧。 它是互聯網中用于將人類可讀的域名&#xff08;例如http://www.example.com&#xff09;轉換為計算機可理解的IP地址&#xff08;例如192.0.2.1&a…

元宇宙核能發電VR模擬仿真實訓教學為建設新型電力系統提供重要支撐

隨著“碳達峰、碳中和”目標與建設新型能源體系的提出&#xff0c;在元宇宙環境下建設電力系統是未來發展的趨勢。以物聯網、區塊鏈、數字孿生、混合現實等技術為主要代表的元宇宙技術體系及其在電力和能源系統中的應用&#xff0c;將會促進智能電網的發展&#xff0c;為建設新…

Oracle 知識篇+分區表上的索引由global改為local注意事項

★ 知識點 二、知識點 ?Local型索引有如下優點 1.Only one index partition must be rebuilt when a maintenance operation other than SPLIT PARTITION or ADD PARTITION is performed on an underlying table partition. 2.The duration of a partition maintenance opera…

【uniapp】使用Vs Code開發uniapp:

文章目錄 一、使用命令行創建uniapp項目&#xff1a;二、安裝插件與配置&#xff1a;三、編譯和運行:四、修改pinia&#xff1a; 一、使用命令行創建uniapp項目&#xff1a; 二、安裝插件與配置&#xff1a; 三、編譯和運行: 該項目下的dist》dev》mp-weixin文件導入微信開發者…