Cookie概念
在瀏覽某些網站時,這些網站會把一些數據存在客戶端,用於使用網站等跟蹤用戶,實現用戶自定義功能
Cookie會在客戶端存活多久呢?這就是Cookie的生命了。默認情況下,Cookie只在瀏覽器的內存中存活,也就是說,如果不設置 過期時間,則表示這個 Cookie生命周期為瀏覽器會話期間,當你關閉瀏覽器后,Cookie就會消失!
可以使用Cookie#setMaxAge(int expiry)來設置Cookie的存活時間。參數expiry表示Cookie存活的秒數。
cookie.setMaxAge(60*60):表示cookie對象可存活1小時。就算關閉瀏覽器,就算重啟客戶端電腦,cookie也會存活1小時。因為當maxAge大於0時,瀏覽器不僅會把cookie保存在瀏覽器內存中,還會把cookie保存到硬盤上。
cookie.setMaxAge(-1):cookie的maxAge屬性的默認值就是-1(其實只要是負數都是一個意思),表示只在瀏覽器內存中存活。一旦關閉瀏覽器窗口,那么cookie就會消失。
cookie.setMaxAge(0):cookie被作廢!表示cookie即不在內存中存活,也不在硬盤上存活,這樣的cookie設置只有一個目的,那就是覆蓋客戶端原來的這個cookie,使其作廢。
存儲在硬盤上的Cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的Cookie,不同的瀏覽器有不同的處理方式。
原理:
如果瀏覽器使用的是 cookie,那么所有的數據都保存在瀏覽器端,
比如你登錄以后,服務器設置了 cookie用戶名(username),那么,當你再次請求服務器的時候瀏覽器會將username一塊發送給服務器,這些變量有一定的特殊標記。
服務器會解釋為 cookie變量。
所以只要不關閉瀏覽器,那么 cookie變量便一直是有效的,所以能夠保證長時間不掉線。
如果你能夠截獲某個用戶的 cookie變量,然后偽造一個數據包發送過去,那么服務器還是認為你是合法的。所以,使用 cookie被攻擊的可能性比較大。
如果設置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發送給服務器。
如果你在機器上面保存了某個論壇 cookie,有效期是一年,如果有人入侵你的機器,將你的 cookie拷走,然后放在他的瀏覽器的目錄下面,那么他登錄該網站的時候就是用你的的身份登錄的。
所以 cookie是可以偽造的。
當然,偽造的時候需要主意,直接copy cookie文件到 cookie目錄,瀏覽器是不認的