cookie和session

基本概念java


cookie是保存在客戶端的文本數據,用來記錄用戶狀態以及其餘一些相關信息瀏覽器

session是保存在服務器端的數據,用來記錄回話過程當中的須要保存狀態的數據服務器

cookie的主要內容包括:名字,值,過時時間,路徑和域
     
      關於做用範圍
      cookie中指定的路徑和域共同組成該cookie的做用範圍,好比說某個cookie的域是localhost,路徑是test那麼該cookie的做用域就是localhost/test,也就是說當你訪問localhost/test這個路徑下的內容時,瀏覽器就會將這個cookie加入咱們請求信息中一塊兒傳遞給瀏覽器,而當咱們訪問其餘路徑的內容時該cookie信息則不會被髮送
     
      關於過時時間
      若是不設置過時時間,則表示這個cookie的生命期爲瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。會話cookie通常不存儲在硬盤上而是保存在內存裏。若是設置了過時時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過時時間。
      存儲在硬盤上的cookie能夠在不一樣的瀏覽器進程間共享,好比兩個IE窗口。而對於保存在內存裏的cookie,不一樣的瀏覽器有不一樣的處理方式。
對於IE,在一個打開的窗口上按Ctrl-N(或者從文件菜單)打開的窗口能夠與原窗口共享,而使用其餘方式新開的IE進程則不能共享已經打開的窗口的內存cookie;對於Mozilla,Firefox0.8,Google全部的進程和標籤頁均可以共享一樣的cookie。cookie

       session與cookie的聯繫
       session機制通常都藉助於cookie來達到保存狀態的目的,咱們知道,瀏覽器以sessionId來標識每一個session,servlet容器將sessionId做爲一個cookie數據保存在客戶的瀏覽器中,每次客戶發送http請求時就會帶上這個cookie信息,服務器經過解析請求就能夠得到sessionid而後找到對應的sessionsession

 

 

深刻探討
     
1.  session什麼時候被刪除jsp

       在談論session機制的時候,經常聽到這樣一種誤解「只要關閉瀏覽器,session就消失了」。之因此會有這種錯覺,是大部分session機制都使用會話cookie來保存session id,而關閉瀏覽器後這個sessionid就消失了,再次鏈接服務器時也就沒法找到原來的session。若是服務器設置的cookie被保存到硬盤上,或者使用某種手段改寫瀏覽器發出的HTTP請求頭,把原來的session id發送給服務器,則再次打開瀏覽器仍然可以找到原來的session。偏偏是因爲關閉瀏覽器不會致使session被刪除,迫使服務器爲seesion設置了一個失效時間,當距離客戶端上一次使用session的時間超過這個失效時間時,服務器就能夠認爲客戶端已經中止了活動,纔會把session刪除以節省存儲空間。
      事實上,session在下列狀況下被刪除
                 a.程序調用HttpSession.invalidate();
                 b.距離上一次收到客戶端發送的session id時間間隔超過了session的超時設置;
                 c.服務器進程被中止網站

2.  cookie被禁用後session還能工做麼?url

     能夠! 通常來將session的實現都是經過cookie來記錄sessionId,可是當cookie被禁用是咱們仍然有其餘辦法來保存sessionId。最多見的就是URL重寫,就是把sessionid直接附加在URL路徑的後面,表現形式爲    http://...../xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764
那麼如何實現url重寫呢?
Java Servlet API 中提出了跟蹤 Session 的另外一種機制,若是客戶端瀏覽器不支持 Cookie,Servlet 容器能夠重寫客戶請求的 URL,把 Session ID 添加到 URL 信息中。 HttpServletResponse 接口提供了重寫 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
   該方法的實現機制爲:
      先判斷當前的 Web 組件是否啓用 Session,若是沒有啓用 Session,直接返回參數 url。
      再判斷客戶端瀏覽器是否支持 Cookie,若是支持 Cookie,直接返回參數 url;若是不支持 Cookie,就在參數 url 中加入 Session ID 信息,而後返回修改後的 url。
    咱們能夠對網頁中的連接稍做修改,解決以上問題:
    修改前:
        <a href=「maillogin.jsp「>
    修改後:
        <a href=「<%=response.encodeURL(「maillogin.jsp「)%>「>spa

3 .  第一方cookie和第三方cookie
      所謂「第一方Cookies」,指的是來自當前正在訪問的網站,儲存了必定信息的Cookies;所謂「第三方Cookies」指的是當前訪問的網站中會加載另外第三方的代碼,例如促銷廣告,那麼第三方也會在訪客的計算機上添加cookie,這種就是第三方cookie。例如訪問新浪微博,京東的廣告出現了,那麼京東有可能就會在訪客的計算器上添加這個cookie文件, 京東就屬於第三方code

4.   開兩個瀏覽器窗口訪問應用程序會使用同一個session仍是不一樣的session        經過上面的討論咱們能夠知道,不一樣的瀏覽器,不一樣的窗口打開方式以及不一樣的cookie存儲方式都會對這個問題的答案有影響

相關文章
相關標籤/搜索