http狀態管理:cookie與session

http狀態管理:cookie與session


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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章