昨天 參加某公司二面,第乙個問題就是「簡單說一下session和cookie」,,答的是一塌糊塗,,惡補了一天,整理如下。
一,概念介紹
由於http協議是無狀態的協議,所以服務端需要記錄使用者的狀態時,就需要用某種機制來識具體的使用者,這個機制就是session.使用session時,伺服器會自動給客戶端傳送乙個sessionid,用以標識不同訪問回話(沒有使用session時,不會有這個標識)【注意】這裡傳送的sessionid標識就是cookiesession:服務端儲存session的方法很多,記憶體、資料庫、檔案都有
session 是乙個抽象概念,將 user(使用者),agent(**) 和 server(服務者) 之間一對一的互動,抽象為「會話」,進而衍生出「會話狀態」,也就是 session 的概念。cookie:
cookie 是乙個實際存在的東西,http 協議中定義在 header 中的字段。可以認為是 session 的一種後端無狀態實現(這裡的意思是由於session只在伺服器端,為何和客戶端互動,而實現的)。session和cookie區別:cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session。
session會在一定時間內儲存在伺服器上。當訪問增多,會比較占用你伺服器的效能,考慮到減輕伺服器效能方面,應當使用cookie。
單個cookie儲存的資料不能超過4k,很多瀏覽器都限制乙個站點最多儲存20個cookie。
【知乎】cookie和session有什麼區別?
二,如何檢視cookie
對於不同瀏覽器可能有不同的檢視方式。(看了下cookie的檔案是亂碼,可能是為了安全。)
google chrome瀏覽器檢視cookie方式(博主使用 60.0.3112.101(正式版本) (64 位))
瀏覽器位址列左側有個圖示,乙個圓圈中間寫了個」i」。
火狐瀏覽器mozilla firefox(54.0.1 (32 位))
三。通過伺服器設定cookie
伺服器端**片段(博主使用springboot,灰常方便,servlet處理類似)
//建立cookie物件儲存
cookie visittime = new cookie("visittime", time);
visittime.setmaxage(1000);
cookie cookie2 = new cookie("cookie2", time);
cookie2.setmaxage(1000);//設定cookie屬性,存活時間(單位,秒)
//傳送cookie
response.addcookie(visittime);
response.addcookie(cookie2);
通過chrome瀏覽器檢視結果如下:
html請求頭及相應頭如下:
四。更改cookie或者刪除cookie
更改cookie和刪除cookie起始是一回事
【注意】:cookie刪除其實是設定生命週期為0,即立刻無效。
//刪除cookie
cookie cookies = request.getcookies();
for (cookie cookie : cookies) else
}
以上**片段僅供參考,,,感覺有了cookie好多東西變得更加簡單方便。
五。注意細節
(1)cookie的屬性:名字,值,過期時間,路徑和域。
路徑與域一起構成cookie的作用範圍。若不設定過期時間(預設為-1),則表示這個cookie的生命期為瀏覽器會話期間,關閉瀏覽器視窗,cookie就消失。這種生命期為瀏覽器會話期的cookie被稱為會話cookie。會話cookie一般不儲存在硬碟上而是儲存在記憶體裡,當然這種行為並不是規範規定的。
若設定了過期時間,瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在不同的瀏覽器程序間共享,比如兩個chrome視窗(不同瀏覽器貌似無法共享)。而對於儲存在記憶體裡的cookie,不同的瀏覽器有不同的處理方式
(2)面試時,討論了乙個問題「如何記錄使用者登入的時間。」(此處登陸時間指的是從登陸到退出的時間,也可以認為是回話的時間。)
方案1:上面說到session是使用者和伺服器的一段「會話」,這段會話有個唯一的sessionid,可以利用這個sessionid,將使用者資訊存入資料庫中,資料庫字段:(使用者id,sessionid,登入時間,退出時間,等)。通過sessionid還可以對使用者操作,做記錄。
事情交給伺服器做了,在高併發下,可能影響伺服器效能。
針對使用者登入的時間,可以使用cookie。
使用者登陸時,將開始時間設定為cookie儲存到使用者端,,
主動退出時(點退出),可以使用js獲取cookie求出時間差,發出請求記錄。
關閉瀏覽器時,可以通過事件,使用js獲取cookie求出時間差,發出請求記錄。
.。。想到了再貼
Cookie和Session的詳解
因為 http 是一種無狀態協議,瀏覽器請求伺服器是無狀態的。實現狀態保持主要有兩種方式 session依賴於cookie 某些 為了辨別使用者身份 進行會話跟蹤而儲存在使用者本地的資料 通常經過加密 提示 cookie是儲存在瀏覽器中的一段純文字資訊,建議不要儲存敏感資訊如密碼,因為電腦上的瀏覽器...
cookie和session區別詳解
cookie的出現原理 為了解決http協議無狀態的問題,由第一次請求時服務端生成,然後保留在客戶端上。以後每次請求都會被帶過去,伺服器根據此在區分請求個體資訊。session 在服務端儲存,儲存形式 檔案,或者資料庫,現在常用的是用redis進行儲存,因為redis是快取資料庫,他有乙個自動失效機...
session和cookie的詳解
會話就是客戶端和服務端互動的過程,cp的三次握手就建立了乙個會話,tcp關閉連線就是關閉會話。cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發乙個cookie。客戶端瀏覽器會把cookie儲存起來。當瀏覽器再請求該 時,...