php中cookie和session的區別和聯絡

2021-07-29 09:59:03 字數 1376 閱讀 6449

php中的session和cookie 相信做php開發的人經常會用到的吧。自己也經常用到,但是一直沒有時間來總結一下,今天就花了一些時間總結了下。

首先講下他們的區別吧:

session存在伺服器端;

cookie存在客戶端;

他們的聯絡:

session是由伺服器維護的乙個伺服器空間,當有使用者訪問時,他的會生成乙個唯一的sessionid並且儲存在本地的cookie當中,使用者提交頁面時,會將這一 sessionid提交到伺服器端,來訪問session資料。

顧經常有面試會問道如果cookie禁用了,session還能用嗎.這個答案肯定是不可以的。

但是我們也可以讓伺服器也可以通過url重寫的方式來傳遞sessionid的值,因此不是完全依賴cookie。如果客戶端cookie禁用,則伺服器可以自動通過重寫url的方式來儲存session的值,並且這個過程對程式設計師透明。

原理:大家都知道,http是無狀態的協議,客戶每次讀取web頁面時,伺服器都開啟新的會話,而且伺服器也不會自動維護客戶的上下文資訊,那麼要怎麼才能實現網上商店中的購物車呢,session就是一種儲存上下文資訊的機制,它是針對每乙個使用者的,變數的值儲存在伺服器端,通過sessionid來區分不同的客戶,session是以cookie或url重寫為基礎的,預設使用cookie來實現,系統會創造乙個名為jsessionid的輸出cookie,我們叫做session cookie,以區別persistent cookies,也就是我們通常所說的cookie,注意session cookie是儲存於瀏覽器記憶體中的,並不是寫到硬碟上的,這也就是我們剛才看到的jsessionid,我們通常情是看不到jsessionid的,但是當我們把瀏覽器的cookie禁止後,web伺服器會採用url重寫的方式傳遞sessionid,我們就可以在位址列看到sessionid=kwjhug6jjm65hs2k6之類的字串。

明白了原理,我們就可以很容易的分辨出persistent cookies和session cookie的區別了,網上那些關於兩者安全性的討論也就一目了然了,session cookie針對某一次會話而言,會話結束session cookie也就隨著消失了,而persistent cookie只是存在於客戶端硬碟上的一段文字(通常是加密的),而且可能會遭到cookie欺騙以及針對cookie的跨站指令碼攻擊,自然不如session cookie安全了。

通常session cookie是不能跨視窗使用的,當你新開了乙個瀏覽器視窗進入相同頁面時,系統會賦予你乙個新的sessionid,這樣我們資訊共享的目的就達不到了,此時我們可以先把sessionid儲存在persistent cookie中,然後在新視窗中讀出來,就可以得到上乙個視窗sessionid了,這樣通過session cookie和persistent cookie的結合我們就實現了跨視窗的session tracking(會話跟蹤)。

php使用者登入驗證cookie與session區別

php高效能高流量使用者登入驗證機制用cookie 還是 session?一 cookie 區別session?cookie客戶端 session存在伺服器端 session安全。二 session在分布式上存在難點。這一點memcache可能會解決一些。但如果不用memcache,解決起來問題大....

Python爬蟲之Cookie和Session

關於cookie和session估計很多程式設計師面試的時候都會被問到,這兩個概念在寫web以及爬蟲中都會涉及,並且兩者可能很多人直接回答也不好說的特別清楚,所以整理這樣一篇文章,也幫助自己加深理解 其實簡單的說就是當使用者通過http協議訪問乙個伺服器的時候,這個伺服器會將一些name value...

Django框架之Cookie和Session元件

cookie是伺服器傳送到使用者瀏覽器並儲存在本地的一小塊資料,它會在瀏覽器下次向同一伺服器再發起請求時被攜帶併發送到伺服器上。通常,它用於告知服務端兩個請求是否來自同一瀏覽器,如保持使用者的登入狀態。cookie 使基於無狀態的 http 協議記錄穩定的狀態資訊成為了可能。1 會話狀態管理 如使用...