cookie 和session 的区别
session是保存在服務器端的,cookie是保存在客戶端的。
二者的定義:
當你在瀏覽網站的時候,WEB 服務器會先送一小小資料放在你的計算機上,Cookie 會幫你在網站上所打的文字或是一些選擇,都紀錄下來。當下次你再光臨同一個網站,WEB 服務器會先看看有沒有它上次留下的 Cookie 資料,有的話,就會依據Cookie里的內容來判斷使用者,送出特定的網頁內容給你。
Cookie 的使用很普遍,許多有提供個人化服務的網站,都是利用 Cookie來辨認使用者,以方便送出使用者量身定做的內容,像是 Web 接口的免費 email 網站,都要用到 Cookie。具體來說cookie機制采用的是在客戶端保持狀態的方案,而session機制采用的是在服務器端保持狀態的方案。同時我們也看到,由于 采用服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session機制可能需要借助于cookie機制來達到保存標識的目的,但實際上它還有其 他選擇。
Cookie機制。正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。
然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。而cookie 的使用是由瀏覽器按照一定的原則在后臺自動發送給服務器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大于等于將要請求的 資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器。
cookie的內容主要包括:名字,值,過期時間, 路徑和域。路徑與域一起構成cookie的作用范圍。若不設置過期時間,則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器窗口,cookie 就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不存儲在硬盤上而是保存在內存里,當然這種行為并不是規范 規定的。若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉后再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤 上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保存在內存里的cookie,不同的瀏覽器有不同的處理方式。
session機制。session機制是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。
當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。保存這個session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。一般這個cookie的名字都是類似于 SEEESIONID。但cookie可以被人為的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器。經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的后面。還有一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞回服務器。比如: <form name="testform" action="/xxx"> <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> <input type="text"> </form> 實際上這種技術可以簡單的用對action應用URL重寫來代替。
cookie 和session 的區別:
1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙(考慮到安全應當使用session)
3、session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能(考慮到減輕服務器性能方面,應當使用COOKIE)
4、單個cookie在客戶端的限制是3K,就是說一個站點在客戶端存放的COOKIE不能3K。
5、所以個人建議: ?? 將登陸信息等重要信息存放為SESSION ?? 其他信息如果需要保留,可以放在COOKIE中
Cookie PK Session
一,Session:含義:有始有終的一系列動作\消息 1,? 隱含了“面向連接” 和“保持狀態”兩種含義 2,? 一種用來在客戶端與服務器之間保持狀態的解決方案 3,? 也指這種解決方案的存儲結構“把××保存在session里”
二, http 協議本來是無狀態的,所以引進了cookie和session機制來保持連接狀態
cookie與session 機制之間的區別與聯系: cookie機制采用的是在客戶端保持狀態的方法 session機制采用的是在服務器端保持狀態的方案,由于在服務器端保? 持狀態的同時必須要求客戶端提供一個標識,
三,關于cookie機制 Cookie 的使用是由瀏覽器按照一定的原則在后臺自動發送給服務器的,瀏覽器會檢查所有存儲的cookie,如果某個cookie所聲明的作用范圍大于等于將要請求的資源所在的位置,則把該cookie附在請求資源的http請求頭上發送給服務器。 存 儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而保存在內存里的cookie,不同的瀏覽器有不同的處理方式,對于IE,在 一個打開的窗口上按CTRL+ N(從文件菜單)打開的窗口可以與原窗口共享cookie,而使用其他方式新開的IE進程則不能共享已經打開的窗口的內存cookie。 Cookie的內容包括: 名字,值,過期時間,路徑和域
四,關于session的機制 當程序需要為某個客戶端的請求創建一個session的時候,服務器首先檢查這個請求是否含了一個session 標識(session id),如果有,則說明以前為該客戶創建了一個session,服務器就按照session id把這個session檢索出來用,一般一個cookie的名字就是類似于session ID,如果cookie被禁止的時候(cookie可以被人為的禁止),經常使用重寫URL的方式,把session ID附加在URL路徑后面,為了在整個交互過程中始終保持狀態,就必須在每個客戶端可能請求的路徑后面都包含這個session id。 人們 以為:“把瀏覽器關閉了,session 就小時了”其實不對,除非程序通知服務器刪除一個session,否則服務器會一直保留,而程序一般都是在用戶作log off的時候發個指令去刪除session。人們之所以會產生這種錯覺,是因為大部分session會采用cookie來保存session,而關閉瀏覽 器后這個session就消失了,如果服務器設置的cookie被保存到硬盤上,或者使用某種手段改寫瀏覽器發出的http請求頭,把原來的 session id發送給服務器,則再次打開瀏覽器,其實是可以再次找到之前的session id的。所以設置失效時間可以起到一定的保護作用。
五,關于session的一些問題 1,? session何時被創建: 不是在客戶端訪問時就被創建,而是在服務器端調用httpservletRequest.getSession(true)時才被創建。 2,? session何時被刪除:? A,程序調用httpSession.invalidate(),B距離上一次收到客戶端發送的session id時間間隔超過了session的超時設置 C,? 服務器進程被停止(非持久session) 3,? 如何做到關閉瀏覽器同時關閉session:? 嚴格說做不到,可以讓所有的客戶端頁面使用window.onclose來監視瀏覽器的關閉東西,然后向服務器發送一個請求來刪除session,但是對于瀏覽器崩潰或者強行殺死進程時仍然無能為力。
轉載于:https://www.cnblogs.com/sourcebank/archive/2012/12/26/2833417.html
總結
以上是生活随笔為你收集整理的cookie 和session 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts+swfupload实现批量
- 下一篇: javascript - dom