四、以PHP、JSP、ASP.NET等程式語言開發網站時,常利用Session、Cookie、POST Method、 GET Method儲存網頁資訊或傳遞參數,請說明其運作方式與特性(安全性、速度…等)。 (16分)
詳解 (共 2 筆)
詳解
Cookie
- Cookie (小餅乾),只是個小文件,通常會記錄一些對網站的個人喜好設定。
- 有些sessionid也寫在裡面!
如果網站是用session驗證做帳號密碼傳遞交換,並且相依於cookie安全設定而產生的 session的id,被包在裡面。 - 因為Cookie傳送時是以明碼方式傳送,機密資料不建議以此方式儲存。
- 資料存放在客戶端,不會造成伺服器端的過載。
- 存在用戶端的cookie,不會因為瀏覽器的關閉,而消失。(直到時效失效為止。)
Session
- Session 主要儲存在Server端的位置,安全性高。
- 主要是記錄著,在 web server 上的使用者訊息(一個SessionID對應一筆SessionID)。
- Session 在伺服器端並不會自動失效,除非session已經超過設置的失效時間。
- Session 機制會在一個用戶完成身分認證後,存下所需的用戶資料,接著產生一組對應的對應的id,存入 cookie 後傳回用戶端。
因為,Cookie 都會被拿來解密,而後竄改。
比方,今天我是用"david"登入,改成另一個身份,叫作"jack",則Server一讀取,誤以為你是"jack",則讓你使用"jack" 身份才能使用的權限,大大的提高風險。
所以,Cookie 在應用時,通常會加入 signedCooke 簽章,來擾亂視聽,讓我們的cookie不容易被竄改。
GET vs POST Method
先舉個例子,如果 HTTP 代表現在我們現實生活中寄信的機制,那麼信封的撰寫格式就是 HTTP。我們姑且將信封外的內容稱為 http-header,信封內的書信稱為 message-body,那麼 HTTP Method 就是你要告訴郵差的寄信規則。
假設 GET 表示信封內不得裝信件的寄送方式,如同是明信片一樣,你可以把要傳遞的資訊寫在信封(http-header)上,寫滿為止,價格比較便宜。然而 POST 就是信封內有裝信件的寄送方式(信封有內容物),不但信封可以寫東西,信封內 (message-body) 還可以置入你想要寄送的資料或檔案,價格較貴。
詳解
cookie和session用來跟蹤使用者的整個會話
Cookie
通過在客戶端記錄資訊確定使用者身份,採用的是在客戶端保持狀態的方案
*工作流程:
1. servlet建立cookie,儲存少量資料,傳送瀏覽器。
2. 瀏覽器獲得伺服器傳送的cookie資料,將自動的儲存到瀏覽器端。
3. 下次訪問時,瀏覽器將自動攜帶cookie資料傳送給伺服器。
1. servlet建立cookie,儲存少量資料,傳送瀏覽器。
2. 瀏覽器獲得伺服器傳送的cookie資料,將自動的儲存到瀏覽器端。
3. 下次訪問時,瀏覽器將自動攜帶cookie資料傳送給伺服器。
cookie是由伺服器端建立傳送回瀏覽器端的,並且每次請求伺服器都會將cookie帶過去,以便伺服器知道該使用者是哪一個。其cookie中是使用鍵值對來儲存資訊的,並且一個cookie只能儲存一個鍵值對。所以在獲取cookie時,是會獲取到所有的cookie,然後從其中遍歷。
*cookie特點:
1. 每一個cookie檔案大小:4kb , 如果超過4kb瀏覽器不識別
2. 一個web站點(web專案):傳送20個
3.一個瀏覽器儲存總大小:300個
4.cookie 不安全,可能洩露使用者資訊。瀏覽器支援禁用cookie操作。
5. 預設情況生命週期:與瀏覽器會話一樣,當瀏覽器關閉時cookie銷燬的。---臨時cookie
1. 每一個cookie檔案大小:4kb , 如果超過4kb瀏覽器不識別
2. 一個web站點(web專案):傳送20個
3.一個瀏覽器儲存總大小:300個
4.cookie 不安全,可能洩露使用者資訊。瀏覽器支援禁用cookie操作。
5. 預設情況生命週期:與瀏覽器會話一樣,當瀏覽器關閉時cookie銷燬的。---臨時cookie
*cookie案例
會話狀態管理(如使用者登入狀態、購物車)
個性化設定(如使用者自定義設定)
瀏覽器行為跟蹤(如跟蹤分析使用者行為歷史記錄,使用者名稱)
會話狀態管理(如使用者登入狀態、購物車)
個性化設定(如使用者自定義設定)
瀏覽器行為跟蹤(如跟蹤分析使用者行為歷史記錄,使用者名稱)
Session
通過在伺服器端記錄資訊確定使用者身份,採用的是在伺服器端保持狀態的方案,儲存一些使用者資訊。
*功能作用:伺服器用於共享資料技術*建立方式:是由伺服器根據請求頭裡面的Cookies裡面的session資訊,沒有的話就建立出來,繫結一個id,和cookies一起返回到客戶端
*工作原理:依靠cookie來做支撐,第一次使用request.session時session被建立,並且會為該session建立一個獨一無二的sessionid存放到cookie中,然後傳送會瀏覽器端,瀏覽器端每次請求時,都會帶著這個sessionid,伺服器就會認識該sessionid,知道了sessionid就找得到哪個session。以此來達到共享資料的目的。 這裡需要注意的是,session不會隨著瀏覽器的關閉而死亡,而是等待超時時間。
GET把引數包含在URL中,POST通過request body傳遞引數
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
GET請求只能進行url編碼,而POST支援多種編碼方式。
GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST中的引數不會被保留。
GET請求在URL中傳送的引數是有長度限制的,而POST麼有。
對引數的資料型別,GET只接受ASCII字元,而POST沒有限制。
GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊。
TCP就像汽車,HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等:
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
GET請求只能進行url編碼,而POST支援多種編碼方式。
GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST中的引數不會被保留。
GET請求在URL中傳送的引數是有長度限制的,而POST麼有。
對引數的資料型別,GET只接受ASCII字元,而POST沒有限制。
GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊。
TCP就像汽車,HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等:
執行GET請求,要給汽車貼上GET的標籤(置method為GET),而且要求把傳送的資料放在車頂上(url中)以方便記錄。
執行POST請求,就要在車上貼上POST的標籤,並把貨物放在車廂裡。
當然,你也可以在GET的時候往車廂內偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些資料,讓人覺得傻乎乎的。HTTP只是個行為準則,而TCP才是GET和POST怎麼實現的基本。
*簡單來說:GET產生一個TCP資料包;POST產生兩個TCP資料包。
對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料)
對於POST,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。
也就是說,GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和伺服器打個招呼“嗨,我等下要送一批貨來,你們開啟門迎接我”,然後再回頭把貨送過去。
因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。
因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。