1. 程式人生 > >簡單談談Cookie,Session與Cache之間的區別

簡單談談Cookie,Session與Cache之間的區別

一 摘要

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來實現,例如如下的程式碼:

< % cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null
) doStuffForNewbie(); //沒有訪問過 } else { doStuffForReturnVisitor(); //已經訪問過了 } % >

這是很淺顯易懂的道理,檢測COOKIE的存在,如果存在說明已經執行過寫入COOKIE的程式碼了,然而執行以上的程式碼後,無論何時結果都是執行doStuffForReturnVisitor(),通過控制面板-Internet選項-設定-察看檔案卻始終看不到生成的cookie檔案,奇怪,程式碼明明沒有問題,不過既然有cookie,那就顯示出來看看。

cookie[]cookies = request.getCookies();
if (cookies.lenght == 0 || cookies == null) out.println("Has not visited this website"); } else { for (int i = 0; i < cookie.length; i++) { out.println("cookie name:" + cookies[i].getName() + "cookie value:" + cookie[i].getValue()); } }

執行結果:

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了。

CACHE ,則是伺服器端的快取,是所有使用者都可以訪問和共享的。

相關推薦

簡單談談Cookie,SessionCache之間區別

一 摘要 Session是由應用伺服器維持的一個伺服器端的儲存空間,使用者在連線伺服器時,會由伺服器生成一個唯一的SessionID,用該SessionID 為識別符號來存取伺服器端的Session儲存空間。而SessionID這一資料則是儲存到客戶端,用Co

String、StringBufferStringBuilder之間區別 .RP

什麽 方式 tr1 abcd 為什麽 mes strong 速度 一點   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言而喻,

String、StringBufferStringBuilder之間區別

安全 .com 學習 ron img build tro ges 變量   大家在最初結束String字符串的時候,都會被教做認為String是不可變的字符串常量,是不可改變的常量。但是我們看下面的一個列子:   為什麽會發生這種情況呢?難道最開始我們學習的就是錯誤的?

cookie,session瀏覽器關系,application

microsoft window tex soft win 它的 隱藏 規則 min 一.cookie在web應用中,對應servlet api的Cookie類,保存在客戶端。 作用:保護用戶通過瀏覽器,訪問web應用程序時允許保存的信息。 實現:每個web應用程序,對於客

自己(轉)String、StringBufferStringBuilder之間區別

理解 疑問 多線程 blog gpo string類 body 對象 就是   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言

談談攔截器過濾器的區別

let 函數回調 依賴 servle pos 裏的 AC 截器 被調用 1、攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。3、攔截器只能對Action請求起作用,而過濾器則可以對幾乎所有請

String、StringBufferStringBuilder之間區別

這三個類之間的區別主要是在兩個方面,即 執行速度 和 執行緒安全 這兩方面。 1. 首先說執行速度,或者說是執行速度, 在這方面執行速度快慢為:StringBuilder > StringBuffer > String String最慢的原

Session Token 的區別

1. 為什麼要有session的出現? 答:是由於網路中http協議造成的,因為http本身是無狀態協議,這樣,無法確定你的本次請求和上次請求是不是你傳送的。如果要進行類似論壇登陸相關的操作,就實現不了了。 2. session生成方式? 答:瀏覽器第一次訪問伺服器,伺

為什麼使用token?sessiontoken的區別

目錄 一、session的狀態保持及弊端 二、token認證機制 一、session的狀態保持及弊端 當用戶第一次通過瀏覽器使用使用者名稱和密碼訪問伺服器時,伺服器會驗證使用者資料,驗證成功後在伺服器端寫入session資料,向客戶端瀏覽器返回sessionid,瀏覽器將se

看過這兩張圖,就明白 Buffer 和 Cache 之間區別

【伯樂線上轉註】:本文源自「沈萬馬」對《Cache 和 Buffer 都是快取,主要區別是什麼?》的回答分享,伯樂線上已獲轉載授權。 Buffer常見的是這個: 對,就是鐵道端頭那個巨大的彈簧一類的東西。作用是萬一車沒停住,撞彈簧上減速慢,危險小一些。叫緩衝。 C

Session Cookies Cache區別

Session 是單使用者的會話狀態。當用戶訪問網站時,產生一個 sessionid。並存在於 cookies中。每次向伺服器請求時,傳送這個 cookies,再從伺服器中檢索是否有這個 sessionid儲存的資料;      Cookie同session一樣是儲存你個人

String、StringBufferStringBuilder之間區別 以及String 直接賦值和new後賦值區別

   這裡是引用他人程式碼: 最近學習到StringBuffer,心中有好些疑問,搜尋了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字串處理中的位置不言而喻,那麼他們到底有什麼優缺點,到底什麼時候該用誰呢

buffer cache區別 (轉)

buffer 與cache 的區別 A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and

Cookie, LocalStorage SessionStorage的區別

一、概念1. Cookie 的大小限制為4KB左右,是網景公司的前僱員 Lou Montulli 在1993年3月的發明。它的主要用途有儲存登入資訊,比如你登入某個網站市場可以看到“記住密碼”,這通常就

String、StringBufferStringBuilder之間區別(轉)

ons 字符 總結 當前 命令 其它 有一個 system 機制 原文地址https://www.cnblogs.com/goody9807/p/6516374.html String 字符串常量StringBuffer 字符串變量(線程安全)StringBuilder

cookie,session,localStorage之間的聯絡區別

1、cookie用來儲存使用者相關資料,儲存的位置在使用者本地: php: setcookie("key","value","time"); 讀取cookie:$_COOKIE 刪除cookie:se

sessionCookie區別

瀏覽器 cookie 通信設備 Cookie與session的區別此文章 來自烏龜運維wuguiyunwei.comQQ群:602183872主要區別:Cookie,也稱為HTTP cookie,Web cookie或瀏覽器cookie,是從網站發送到服務器並存儲在用戶的Web瀏覽器中的一小部分數

PHP中常用的超全局變量 表單中get和post提交方式的區別 sessioncookie區別 GD庫是做什麽用的

屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值

[區別]APPlication,Session,Cookie,ViewState和Cache

bcf 百度 red 搬家 view color app 發布 ati 原文發布時間為:2009-08-01 —— 來源於本人的百度文章 [由搬家工具導入]在ASP.NET中,有很多

SessionCookie區別聯系

系統 數據 如果 多層 刪除 默認 重新 sqli nbsp 描述兩個事情的不同,一般先從概念入手,然後分析他們是怎麽生成、怎麽使用以及怎麽消亡的: 1、Cookie僅由客戶端生成、管理並使用,PHP只是發出指令要求客戶端如何生成Cookie、何時過期等,但是客戶端不一