cookie session的Q A故事 原理篇

2022-01-10 10:33:53 字數 3510 閱讀 1298

本文以q&a來解說問題,我相信會更容易理解更有意思!

session 與 cookie 都是為了保持訪問使用者與後端伺服器的互動狀態的介質。

1. 什麼是cookie?

cookie意為「甜餅」,是由w3c組織提出,最早由netscape社群發展的一種機制。目前cookie已經成為標準,所有的主流瀏覽器如ie、netscape、firefox、opera等都支援cookie。由於http是一種無狀態的協議,伺服器單從網路連線上無從知道客戶身份。怎麼辦呢?就給客戶端們頒發乙個通行證吧,每人乙個,無論誰訪問都必須攜帶自己通行證。這樣伺服器就能從通行證上確認客戶身份了。這就是cookie的工作原理。

cookie何時生成?cookie實際上是一小段的文字資訊,是一本地儲存技術。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發乙個cookie。客戶端瀏覽器會把cookie儲存起來。當瀏覽器再請求該**時,瀏覽器把請求的**連同該cookie一同提交給伺服器。伺服器檢查該cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改cookie的內容。

cookie應注意什麼?cookie功能需要瀏覽器的支援。如果瀏覽器不支援cookie(如大部分手機中的瀏覽器)或者把cookie禁用了,cookie功能就會失效。不同的瀏覽器採用不同的方式儲存cookie。如ie瀏覽器會在「c:\documents and settings\你的使用者名稱\cookies」資料夾下以文字檔案形式儲存,乙個文字檔案儲存乙個cookie。

cookie的安全性?cookie具有不可跨網域名稱性,根據cookie規範,瀏覽器訪問google只會攜帶google的cookie,而不會攜帶baidu的cookie。google也只能操作google的cookie,而不能操作baidu的cookie。但是,在客戶端的資料畢竟是不可靠的,一般只用於儲存一些不太重要的資料!

cookie是何時被刪除的?不設定過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在不同的瀏覽器程序間共享,比如兩個ie視窗。而對於儲存在記憶體裡的cookie,不同的瀏覽器有不同的處理方式。

2. 什麼是session?

session是另一種記錄客戶狀態的機制,不同的是cookie儲存在客戶端瀏覽器中,而session儲存在伺服器上。客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上。這就是session。客戶端瀏覽器再次訪問時只需要從該session中查詢該客戶的狀態就可以了。session是伺服器使用一種類似於雜湊表的結構(也可能就是使用雜湊表)來儲存資訊的。

session何時生成?session在使用者第一次訪問伺服器的時候自動建立。需要注意只有訪問動態程式時才會建立session,只訪問html、image等靜態資源並不會建立session。session生成後,只要使用者繼續訪問,伺服器就會更新session的最後訪問時間,並維護該session。使用者每訪問伺服器一次,無論是否讀寫session,伺服器都認為該使用者的session「活躍(active)」了一次。

session應注意什麼?session儲存在伺服器端。為了獲得更高的訪問速度,伺服器一般把session放在記憶體裡。每個使用者都會有乙個獨立的session。如果session內容過於複雜,當大量客戶訪問伺服器時可能會導致記憶體溢位。因此,session裡的資訊應該盡量精簡。而且如果有多台web伺服器的話,必須要考慮如何共享session的問題!

session的安全性?session存放在伺服器端,一般來說,還是很安全的!

session是何時被刪除的?session長期不被使用,超過了超時時間沒訪問過伺服器,session就自動失效了(原理是被某程序清理乾掉了)。

3. php中的session cookie原理?

php在http 協議的頭資訊裡傳送cookie,因此  setcookie()函式必須在其它資訊被輸出到瀏覽器前呼叫,這和對header()函式的限制類似。

可以用 setcookie()或 setrawcookie()函式來設定 cookie。也可以通過向客戶端直接傳送http頭來設定。要刪除cookie,只需把有效時間設為小於當前時間,和把值設定為空即可。

使用方法?通過php內建超級全域性變數$_cookie 就可以讀取瀏覽器端的cookie。

session 使用過期時間設為0 的cookie,並且將乙個稱為session id 的唯一識別符號(一長串字串),在伺服器端同步生成一些 session 檔案(可以自己定義 session 的儲存型別),與使用者機關聯起來。web應用程式存貯與這些 session 相關的資料,並且讓資料隨著使用者在頁面之間傳遞.訪問**的來客會被分配乙個唯一的識別符號,即所謂的 session id。它要麼存放在客戶端的cookie,要麼經由 url 傳遞.session 允許使用者註冊任意數目的變數並保留給各個請求使用。當來客訪問**時,php會自動(如果session.auto_start 被設為1)或在使用者請求時(由session_start()明確呼叫或session_register() 暗中呼叫)檢查請求中是否傳送了特定的session id。如果是,則之前儲存的環境就被重建。

session最最核心的概念就是:網頁間跳轉的額外資料,儲存在伺服器,用乙個id標識,瀏覽器要維持session,需要每次提交都帶上這個id.

使用方法?通過$_session這個變數進行設定和獲取。

session是何時被刪除的?通過一種垃圾**機制進行清理刪除。session.gc_maxlifetime 指定過了多少秒之後資料就會被視為"垃圾"並被清除。 垃圾蒐集可能會在 session 啟動的時候開始( 取決於 session.gc_probability 和 session.gc_divisor)。 session.gc_probability 與 session.gc_divisor 合起來用來管理 gc(garbage collection 垃圾**)程序啟動的概率。此概率用 gc_probability/gc_divisor 計算得來。例如 1/100 意味著在每個請求中有 1% 的概率啟動 gc 程序。session.gc_probability 預設為1,session.gc_divisor 預設為 100。

最後,我將本文精簡為一句話:cookie和session都是為了儲存使用者的狀態而存在的,他在被訪問時被通過一定的安全機制演算法生成,又通過瀏覽器或某語言的一些特定程序(可以認為是守護程序)定期清理,session涉及記憶體及多伺服器問題,可以將其儲存到資料庫或其他地方解決該問題!

ok...

cookie session(過時的寫法)

cookie存在客戶端的瀏覽器中,不太安全,容易被竊取,session被存在伺服器中 類似於字典中的value,伺服器會給瀏覽器返回這個value的key值,下次進來直接根據key取value.獲取表單資料 password request.post.get pwd print username,p...

Cookie,Session和Token的區別

在做介面測試時,經常會碰到請求引數為token的型別,但是可能大部分測試人員對token,cookie,session的區別還是一知半解。cookie cookie 是乙個非常具體的東西,指的就是瀏覽器裡面能永久儲存的一種資料,僅僅是瀏覽器實現的一種資料儲存功能。cookie由伺服器生成,傳送給瀏覽...

Cookie Session 的工作原理

cookie是一種伺服器通知瀏覽器,以鍵值對儲存的小量資訊的技術。瀏覽器向伺服器傳送請求 伺服器建立cookie物件,該cookie物件會攜帶使用者資訊,伺服器將該cookie物件傳送給瀏覽器。cookie儲存在瀏覽器端 以後瀏覽器再次向伺服器傳送請求時,會攜帶cookie物件 伺服器通過該cook...