關於Session和cookie個人見解
背景:因為HTTP是無狀態的協議,這樣我們無法推斷同一個用戶多次請求時記錄用戶的信息從而須要頻繁的身份校驗,包含開啟多個瀏覽器瀏覽同一個站點依然須要不停的都身份驗證。這樣就產生了session機制,能夠理解成Session基於保持狀態的Webserver的方法,那麽cookie就是基於保持狀態的client方法。因為一般的Session唯一標示SessionID又依賴於cookie的存儲(這裏僅僅是相對,因為sessionID也能夠通過url重定向實現)。
第一:cookie採用的是client保持狀態的方案,而session採用的是server保持的狀態。
當client第一次發送請求給server的時候,此時server就產生一個sessionId並存入cookie中返回給client,但client再次訪問的時候。請求攜帶cookie。這樣就能夠依據cookie裏的sessionId來推斷是否服務端有相應的session。假設存在則,身份驗證成功,反之失敗。我們能夠發現,實際上Session是存入在server端的。而cookie是存入在client的。
第二:Session不區分路徑,同一個用戶在訪問同一個站點,在其它地方都能夠使用。而cookie假設設定了路徑的話,僅僅能在作用域中有效。
假設cookie所聲明的作用域大於請求的所在資源時候,是須要附在HTTP請求Header上。
第三:假設不設定會話時間的話,cookie的生命周期在瀏覽器關閉結束,這種cookie能夠稱之為會話cookie。也是默認的cookie形式;還有一種就是將cookie設定超時時間。存入磁盤,這種話。稱之為persistent cookie,當然一般不這麽做這樣能夠通過cookie欺騙來攻擊。而session存入在server端,而session數據存入server端,當用戶請求服務端的時候,server通過請求中cookie攜帶的SessionId來檢索對應的sesion。這樣一來Session非常安全。同一時候這裏也闡釋了但瀏覽器關閉的時候,並不會使得Session失效。由於Session是存在服務端的,僅僅是Session cookie隨著會話cookie在瀏覽器關閉後也失效。
第四:Session的創建並不能覺得是有client訪問就須要創建,實際上在調用HttpServletRequest.getSession(true)的時候才會被創建,
第五:使用session的步驟:1. 啟動session:使用session_start()函數來啟動。
2. 註冊會話:直接給$_SESSION數組加入元素就可以。
3. 使用會話:推斷session是否為空或者是否已經註冊,假設已經存在則像普通數組使用就可以。4. 刪除會話:1.能夠使用unset刪除單個session。2.使用$_SESSION=array()的方式。一次註銷全部的會話變量。3.使用session_destroy()函數來徹底銷毀session。
第六: cookie的使用步驟: 1) 創建Cookie對象 ;2) 設置最大時效 ; 3) 將Cookie放入到HTTP響應報頭
Cookie cookie = new Cookie("Mytest", "22222"); cookie.setDomain("172.20.40.73"); cookie.setMaxAge(30000); cookie.setPath("/"); response.addCookie(cookie); javax.servlet.http.Cookie[] diskCookies = request.getCookies(); response.sendRedirect("ReciveCookie");
第七:關於cookie的讀取:
String cookieName = “userName”; Cookie cookies[] = request.getCookies(); if (cookies!=null) { for(int i=0;i<cookies.length;i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) doSomethingWith(cookie.getValue()); } }第八:關於cookie與Session的使用場合:
1、cookie不是非常安全。別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
2、session會在一定時間內保存在server上。當訪問增多,會比較占用你server的性能
考慮到減輕server性能方面,應當使用COOKIE。
3、單個cookie保存的數據不能超過4K,非常多瀏覽器都限制一個網站最多保存20個cookie。
4、將登陸信息等重要信息存放為SESSION,其它信息假設須要保留。能夠放在COOKIE中
關於Session和cookie個人見解