session是由應用伺服器維持的乙個伺服器端的儲存空間,使用者在連線伺服器時,會由伺服器生成乙個唯一的sessionid,用該sessionid 為識別符號來訪問伺服器端的session儲存空間。而sessionid這一資料則是儲存到客戶端,用cookie儲存的,使用者提交頁面時,會將這一 sessionid提交到伺服器端,來訪問session資料。這一過程,是不用開發人員干預的。所以一旦客戶端禁用cookie,那麼session也會失效。
伺服器也可以通過url重寫的方式來傳遞sessionid的值,因此不是完全依賴cookie。如果客戶端cookie禁用,則伺服器可以自動通過重寫url的方式來儲存session的值,並且這個過程對程式設計師透明。
可以試一下,即使不寫cookie,在使用request.getcookies();取出的cookie陣列的長度也是1,而這個cookie的名字就是jsessionid,還有乙個很長的二進位制的字串,是sessionid的值。
cookie是客戶端的儲存空間,由瀏覽器來維持。
在一些投票之類的場合,我們往往因為公平的原則要求每人只能投一票,在一些web開發中也有類似的情況,這時候我們通常會使用cookie來實現,例如如下的**:
< % cookiecookies = request.getcookies();
if (cookies.lenght == 0 || cookies == null)
dostufffornewbie();
//沒有訪問過
}else
% >
這是很淺顯易懂的道理,檢測cookie的存在,如果存在說明已經執行過寫入cookie的**了,然而執行以上的**後,無論何時結果都是執行dostuffforreturnvisitor(),通過控制面板-internet選項-設定-察看檔案卻始終看不到生成的cookie檔案,奇怪,**明明沒有問題,不過既然有cookie,那就顯示出來看看。
cookiecookies = request.getcookies();
if (cookies.lenght == 0 || cookies == null)
out.println("has not visited this website");
}else
}執行結果:
cookie name:jsessionid cookie value:kwjhug6jjm65hs2k6
為什麼會有cookie呢,大家都知道,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(會話跟蹤)。
在一些web開發的書中,往往只是簡單的把session和cookie作為兩種並列的http傳送資訊的方式,session cookies位於伺服器端,persistent cookie位於客戶端,可是session又是以cookie為基礎的,明白的兩者之間的聯絡和區別,我們就不難選擇合適的技術來開發web service了。
PHP中session和cookie的區別和聯絡
ps 本人親測,阿里雲2核4g5m的伺服器價效比很高,新使用者一塊多一天,老使用者三塊多一天,最高可以買三年,感興趣的可以戳一下 阿里雲折扣伺服器 這兩者,區別和聯絡其實也挺深奧的,總是了解一些皮毛,每次都得上網查,今天寫下來,每隔段時間就看看,加深記憶。session是由應用伺服器維持的乙個伺服器...
PHP的SESSION和COOKIE的區別和聯絡
區別 cookie儲存在客戶端,session儲存在伺服器端。cookie因為儲存在客戶端,所以安全性較低,session安全性較高。cookie有大小限制,為4k,僅能儲存20個cookie,session沒有限制。cookie僅支援儲存字串,session可以儲存所有型別。聯絡 同樣是會話技術。...
php中cookie和session的區別和聯絡
php中的session和cookie 相信做php開發的人經常會用到的吧。自己也經常用到,但是一直沒有時間來總結一下,今天就花了一些時間總結了下。首先講下他們的區別吧 session存在伺服器端 cookie存在客戶端 他們的聯絡 session是由伺服器維護的乙個伺服器空間,當有使用者訪問時,他...