具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。Cookie的優缺點:優點:極高的擴充套件性和可用性透過良好的程式設計,控制儲存在cookie中的session物件的大小。透過加密和安全傳輸技術(SSL),減少cookie被破解的可能性。只在cookie中存放不敏感資料,即使被盜也不會有重大損失。控制cookie的生命期,使之不會永遠有效。偷盜者很可能拿到一個過期的cookie。缺點:Cookie數量和長度的限制。每個domain最多隻能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。安全性問題。如果cookie被人攔截了,那人就可以取得所有的session資訊。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只要原樣轉發cookie就可以達到目的了。有些狀態不可能儲存在客戶端。例如,為了防止重複提交表單,我們需要在伺服器端儲存一個計數器。如果我們把這個計數器儲存在客戶端,那麼它起不到任何作用。Session的優缺點:優點如果要在諸多Web頁間傳遞一個變數,那麼用Session變數要比透過QueryString傳遞變數可使問題簡化。要使WEb站點具有使用者化,可以考慮使用Session變數。你的站點的每位訪問者都有使用者化的經驗,基於此,隨著LDAP和諸如MS Site Server等的使用,已不必再將所有使用者化過程置入Session變量了,而這個使用者化是取決於使用者喜好的。你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放。缺點Session變數和cookies是同一型別的。如果某使用者將瀏覽器設定為不相容任何cookie,那麼該使用者就無法使用這個Session變數!當一個使用者訪問某頁面時,每個Session變數的執行環境便自動生成,這些Session變數可在使用者離開該頁面後仍保留20分鐘!(事實上,這些變數一直可保留至“timeout”。“timeout”的時間長短由Web伺服器管理員設定。一些站點上的變數僅維持了3分鐘,一些則為10分鐘,還有一些則保留至預設值20分鐘。)所以,如果在Session中置入了較大的物件(如ADO recordsets,connections, 等等),那就有麻煩了!隨著站點訪問量的增大,伺服器將會因此而無法正常執行!因為建立Session變數有很大的隨意性,可隨時呼叫,不需要開發者做精確地處理,所以,過度使用session變數將會導致程式碼不可讀而且不好維護。雖然“你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放”。但是,“誰”想到那兒呢?變數的含義是什麼?這些都變得不很清晰。
具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。Cookie的優缺點:優點:極高的擴充套件性和可用性透過良好的程式設計,控制儲存在cookie中的session物件的大小。透過加密和安全傳輸技術(SSL),減少cookie被破解的可能性。只在cookie中存放不敏感資料,即使被盜也不會有重大損失。控制cookie的生命期,使之不會永遠有效。偷盜者很可能拿到一個過期的cookie。缺點:Cookie數量和長度的限制。每個domain最多隻能有20條cookie,每個cookie長度不能超過4KB,否則會被截掉。安全性問題。如果cookie被人攔截了,那人就可以取得所有的session資訊。即使加密也與事無補,因為攔截者並不需要知道cookie的意義,他只要原樣轉發cookie就可以達到目的了。有些狀態不可能儲存在客戶端。例如,為了防止重複提交表單,我們需要在伺服器端儲存一個計數器。如果我們把這個計數器儲存在客戶端,那麼它起不到任何作用。Session的優缺點:優點如果要在諸多Web頁間傳遞一個變數,那麼用Session變數要比透過QueryString傳遞變數可使問題簡化。要使WEb站點具有使用者化,可以考慮使用Session變數。你的站點的每位訪問者都有使用者化的經驗,基於此,隨著LDAP和諸如MS Site Server等的使用,已不必再將所有使用者化過程置入Session變量了,而這個使用者化是取決於使用者喜好的。你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放。缺點Session變數和cookies是同一型別的。如果某使用者將瀏覽器設定為不相容任何cookie,那麼該使用者就無法使用這個Session變數!當一個使用者訪問某頁面時,每個Session變數的執行環境便自動生成,這些Session變數可在使用者離開該頁面後仍保留20分鐘!(事實上,這些變數一直可保留至“timeout”。“timeout”的時間長短由Web伺服器管理員設定。一些站點上的變數僅維持了3分鐘,一些則為10分鐘,還有一些則保留至預設值20分鐘。)所以,如果在Session中置入了較大的物件(如ADO recordsets,connections, 等等),那就有麻煩了!隨著站點訪問量的增大,伺服器將會因此而無法正常執行!因為建立Session變數有很大的隨意性,可隨時呼叫,不需要開發者做精確地處理,所以,過度使用session變數將會導致程式碼不可讀而且不好維護。雖然“你可以在任何想要使用的時候直接使用session變數,而不必事先宣告它,這種方式接近於在VB中變數的使用。使用完畢後,也不必考慮將其釋放,因為它將自動釋放”。但是,“誰”想到那兒呢?變數的含義是什麼?這些都變得不很清晰。