會話之Session與Cookie

來源:互聯網
上載者:User

Cookie:將會話相關的資料儲存到瀏覽器中,並且在每次訪問伺服器時都帶過去

 1javax.servlet.http.Cookie,可以直接利用此類的構造方法建立一個Cookie,建立出來的Cookie需要設定一個名稱和值
 2response身上具有addCookie的方法,可以將建立出來的組織成響應訊息中的set-cookie頭,通知瀏覽器儲存該cookie
 3request身上具有getCookies方法,可以擷取瀏覽器帶過來的所有Cookie
 4Cookie方法:注意,瀏覽器是根據cookie的名稱加上cookie的path來區分是否是同一個cookie的,如果需要覆蓋之前的cookie,除了保證名稱相同外還要保證path也相同

 

public Cookie(String name,String value)利用構造方法建立一個Cookie對象,在建立的時候就要指定該Cookie的名和值
setValue與getValue方法  設定或者擷取Cookie的值
setMaxAge與getMaxAge方法  如果不設定cookie的MaxAge(或將其值設定為負值),則預設情況下瀏覽器會將cookie儲存在瀏覽器的記憶體中,會隨著瀏覽器關閉而消失。如果設定為一個正值,則代表該Cookie要儲存的以秒為單位的時間值,如此,該cookie將會被瀏覽器儲存到硬碟中去。如果將MaxAge設定為0,則是通知瀏覽器去刪除該Cookie。
 setPath與getPath方法   用來指定訪問哪個ULR及其子URL時帶上此cookie,如果不設定此值,則瀏覽器預設會將發送該cookie的servlet所在的路徑作為path使用。
    例如:
      setPath("/Day06")則/Day06/.../...的路徑都會帶上該Cookie
      如果發送該Cookie的Servlet是 /Day06/servlet/Demo1Servlet,並且未設定setPat,則瀏覽器在訪問/Day06/servlet/..時會帶上該cookie
      setDomain與getDomain方法  設定cookie對應的網域名稱,此方法一旦調用,則瀏覽器會認為該cookie是一個第三方cookie而拒收
      getName方法 擷取該cookie的名字,注意沒有setName方法,一個Cookie一旦建立出來就不能修改名字了

 

 

HttpSession:在伺服器中,為瀏覽器建立獨一無二的記憶體空間,在其中儲存會話相關的資訊。
   1session作為域使用:他是j2ee中四大域對象之一,作用範圍為整個會話。
   2session的生命週期:在第一次調用reqeust.getSession()方法的時候,伺服器會檢查是已經有對應的session,如果沒有就在記憶體中建立一個session並返回。
            當一段時間內session沒有被使用,一般為30分鐘(此值可以在web.xml中配置<session-config>來配置,也可以使用TomcatManager進行配置),則伺服器會銷毀該session
            當伺服器強行關閉時,沒有到期的session也會跟著銷毀。
            如果調用session提供的invalidate(),可以立即銷毀session。
   3session的原理:在伺服器第一次調用request.getSession()方法的時候,會在記憶體中建立一個session對象,此對象具有一個獨一無二的id值,此id值將會以cookie(JSESSIONID)的形式發送給瀏覽器,瀏覽器以後每次訪問都會帶著此cookie,伺服器就利用此cookie區分瀏覽器找到對應的session空間。
   4同一電腦內的不同瀏覽器使用同一session:JSESSIONID這個cookie預設是儲存在瀏覽器記憶體中的,我們可以自己建立一個同名同path的Cookie,並設定maxage值,使其被儲存在硬碟中,從而實現統一電腦中不同瀏覽器公用一個JSESSIONID從而使用同一個session。
   5使禁用Cookie的瀏覽器也可以使用session:由於session是基於cookie啟動並執行,如果禁用了cookie則會導致session不可用,我們可以將提供給這種瀏覽器的所有的URL進行重寫,在所有的URL後跟上JSEESIONID,從而保證即使禁用了Cookie也能以URL的形式帶回JSESSIONID,從而可以使用session。要重寫所有的URL是一項成本很高的工作,一般我們不會這麼做。
  response. encodeRedirectURL(java.lang.String?url)如果此url是作為重新導向操作的地址時使用此方法
  response. encodeURL(java.lang.String?url)如果此url是普通串連則使用此方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.