阿摩線上測驗 登入

申論題資訊

試卷:107年 - 107 經濟部所屬事業機構_新進職員甄試_資訊:1.資訊管理、2.程式設計#79709
科目:國營事業◆1.資訊管理 2.程式設計
年份:107年
排序:0

申論題內容

四、以PHP、JSP、ASP.NET等程式語言開發網站時,常利用Session、Cookie、POST Method、 GET Method儲存網頁資訊或傳遞參數,請說明其運作方式與特性(安全性、速度…等)。 (16分)

詳解 (共 2 筆)

詳解 提供者:蔡明勳

Cookie

  1. Cookie (小餅乾),只是個小文件,通常會記錄一些對網站的個人喜好設定。
  2. 有些sessionid也寫在裡面!
    如果網站是用session驗證做帳號密碼傳遞交換,並且相依於cookie安全設定而產生的 session的id,被包在裡面。
  3. 因為Cookie傳送時是以明碼方式傳送,機密資料不建議以此方式儲存。
  4. 資料存放在客戶端,不會造成伺服器端的過載。
  5. 存在用戶端的cookie,不會因為瀏覽器的關閉,而消失。(直到時效失效為止。)

Session

  1. Session 主要儲存在Server端的位置,安全性高。
  2. 主要是記錄著,在 web server 上的使用者訊息(一個SessionID對應一筆SessionID)。
  3. Session 在伺服器端並不會自動失效,除非session已經超過設置的失效時間。
  4. 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) 還可以置入你想要寄送的資料或檔案,價格較貴。

詳解 提供者:abaochang
cookie和session用來跟蹤使用者的整個會話

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
*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請求,要給汽車貼上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更有效。