http本身沒有狀態也沒有記憶,但是如果這樣的話,如果後一次需要先前的信息,就會重新傳送大量信息。當網站出現以後,http這種特性就大大阻礙了網站發展(你不能做每次操作都得讓用戶輸入登錄密碼)所以就出現了coookie和session。
cookie在客戶端,session在服務端
(開了咖啡店,顧客喝十杯送一杯,如何記住顧客喝了十杯?
卡在客戶手裏,簽到系統在店主這邊)
Cookie
◆Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就向客戶端瀏覽器頒發一個Cookie。
◆客戶端瀏覽器會把Cookie保存起來。 當瀏覽器再請求該網站時瀏覽器把請求的網址連同該Cookie一同提交給服務器。服務器檢查該Cookie,以此來辨認用戶狀態,服務器還可以根據自己的需要修改cookie的內容
查看當前網站的cookie的快捷方法
在瀏覽器的地址欄輸入:javascript:alert(document.cookie) (不區分大小寫),就會彈出你在當前網頁登錄的cookie信息。(火狐好像不支持這個操作,IE可以)
注意:你把以上覆制進入地址欄後會發現,“javascript”字符串消失不見,不管“javascript”裏面哪一個字母被大寫或小寫,只要識別爲“javascript”就會自動被過濾隱藏消失。
你應該複製下面這個到地址欄(粘貼到地址欄後再把前面的“1”去掉):
1javascript:alert(document.cookie)
彈出的cookie信息:
不同的瀏覽器採用不同的方式保存Cookie。
IE瀏覽器會在“C:\Documents and Settings\你的用戶名\Cookies”文件夾下以文本文件形式保存,一個文本文件保存一個Cookie。
cookie的工作原理
可總結如下:client連接server
client生成cookie(有效期),再次訪問時攜帶cookie
server根據cookie的信息識別用戶身份
Session
◆Session是服務器端使用的一種記錄客戶端狀態的機制,使用上比Cookie簡單一些。保存在服務器上。客戶端瀏覽器訪問服務器的時候,如果服務器啓用session,就要爲這個用戶創建一個session,檢查這個用戶有沒有一個session id,如果有的話說明之前創建過,沒有的話就心創建一個。
◆服務器把客戶端信息以某種形式記錄在服務器上
客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了
同一個客戶端每次和服務端交互時,不需要每次都傳回所有的 Cookie 值,而是隻要傳回一個 ID,這個 ID 是客戶端第一次訪問服務器的時候生成的,而且每個客戶端是唯一的。這樣每個客戶端就有了一個唯一的 ID,客戶端只要傳回這個 ID 就行了,這個 ID 通常是 name爲 JSESIONID 的一個 Cookie。Session依據這個id來識別是否爲同一用戶(只認ID不認人)。
session的原理
保存Session ID的方式
◆Cookie
因爲有時候可以把瀏覽器的cookie禁止,這個時候session也就沒用了,所以還有URL重寫
◆URL重寫
將session id 直接附加在url後面,
形式1:作爲url的附加信息
形式2:作爲一個參數放在url裏
◆隱藏表單
服務器自動修改表單,添加一個隱藏的字段,以便表單提交時候能夠把session id傳遞到服務端上
session的有效期
會有越來越多的用戶訪問服務器,所以就會有越來越多的session,當訪問增多,會比較佔用你服務器的性能,所以超過一定時間沒有動作的session,會失效
主動失效:
程序調用HttpSession.invalidate()
服務器進程被停止,session失效
區別
cookie相當於檢查客戶身上的通行證,session則是檢查服務器上的客戶明細表(相當於建了客戶檔案表)
1.cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2.cookie不是很安全,存儲在瀏覽器裏,對客戶端來說是可見的,客戶端的一些程序可能會複製,修改cookie,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙
3考慮到減輕服務器性能方面,應當使用COOKIE。(可以像谷歌一樣,把COOKIE的信息加密,提交到服務器端以後,再進行解密。保證COOKIE中的信息只有服務器才能讀懂)
4.session存放在服務器上,不存在敏感信息泄露的風險,考慮到安全應當使用session。
5.session會在一定時間內保存在服務器上(一般只有關閉瀏覽器,這個session就失效了)。當訪問增多,會比較佔用你服務器的性能,cookie的有效時間都特別久,甚至可以做到永遠,cookie保存在客戶端,不太造成服務器的壓力
6.單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。