cookie與session都是保存會話數據的技術 cookie存放在用戶端的磁碟中,瀏覽器一般只允許存放300個cookie,且每一個站點最多存放20個cookie,每個cookie的大小限製為4kb;當用戶需要記住自己的用戶名與密碼的時候,事件發生在用戶本地瀏覽器,所以使用cookie技術。co ...
cookie與session都是保存會話數據的技術
cookie存放在用戶端的磁碟中,瀏覽器一般只允許存放300個cookie,且每一個站點最多存放20個cookie,每個cookie的大小限製為4kb;當用戶需要記住自己的用戶名與密碼的時候(實際應用中,安全考慮儘量不要將密碼保存在cookie中),事件發生在用戶本地瀏覽器,所以使用cookie技術。cookie雖然發生在瀏覽器本地,但是常常是由web伺服器對其操作,並非用本地的js(可以直接在瀏覽器上設置一個cookie)或者其他靜態代碼實現,瀏覽器向伺服器發送login請求後,伺服器根據用戶的選擇是否保存用戶名或密碼的用戶瀏覽器,它首先創建相應cookie對象,寫入相關數據,然後設置cookie的生命周期(如果一個cookie沒有設置生命周期,當瀏覽器關閉之後cookie將銷毀),並把這個cookie添加的response請求寫回用戶瀏覽器。
session在伺服器的記憶體中保存,所以當session數據存放過多時伺服器的性能明顯下降,當用戶需要在一段時間里持續保存某些數據時且這些數據來源於伺服器,使用session技術可以解決,如用戶的購物車或網站每一個網頁顯示用戶的一些個人數據等,這樣可以避免頻繁的資料庫操作,session與cookie一樣有生命周期,且預設的生命周期取決與web伺服器的配置文件,但不同於cookie生命周期的是,session生命周期是指無操作時間,在給定的時間里用戶沒有再次訪問該session即失效,如果中間有訪問,生命周期將重置,生命周期結束後銷毀session。
每一個用戶之所以能夠找到自己在伺服器對應的session信息是因為每一個session在創建的時候便有了唯一的sessionid,並寫回了瀏覽器的cookie當中,當瀏覽器訪問該站點時就帶上本地cookie信息中的sessionid而訪問伺服器中對應的session,所以當瀏覽器禁用cookie時,不僅cookie信息不能使用,連伺服器端的session也不能使用。知道session之所以能訪問是因為瀏覽器發送了sessionid之後,當用戶禁用cookie時要做到仍能訪問session就需要手動在瀏覽器發送的請求中帶上相對應sessionid,而httpresponse提供了url地址重寫的方法智能的判斷瀏覽器是否禁用cookie,如果禁用則在url地址後面添加sessionid參數,否則不做操作。