第二章 Session會話管理

採用網址重寫的缺點:java

在有些Web瀏覽器中,URL限制爲2000個字符。數據庫

僅當有連接要插入值時,值才能轉換成後面的資源。此外,要把值添加到靜態頁面的連接中,可不是一件容易的事情。瀏覽器

網址重寫必須在服務器端有效。全部的連接都必須帶有值,這樣可能出現一個問題,即一個頁面中可能會有許多個連接。服務器

某些字符,例如空格、&符號及問號都必須進行編碼。cookie

添加到URL中的信息是明顯可見的,這種狀況有時可不是咱們所期待的。session

 

網址重寫案例設計:編碼

1.訪問top10,返回一個頁面,該頁面中的每一個按鈕的url都被重寫了,加上了type參數url

2.點擊按鈕後,訪問top10,並帶上Token,服務端根據Token信息返回相應的頁面設計

3.服務器根據用戶選擇的URL信息,返回相應的頁面內容對象

 

 

隱藏域案例設計:

1.customer、editCustomer、updateCustomer用同一個Servlet進行處理

2.Customer上edit按鈕,會將用戶id提交給CustomerEdit頁面

3.CustomerEdit上用隱藏域記錄當前正在被編輯用戶的id,update按鈕會將信息提交給updateCustomer

4.updateCustomer完成更新,不返回頁面

 

Cookie:

cookie是自動地在Web服務器和瀏覽器之間來回傳遞的一小塊信息。

cookie適用於那些須要跨越許多頁面的信息。

因爲cookie是做爲HTTP標頭嵌入的,所以傳輸它的過程由HTTP協議處理。

能夠根據本身的須要設置cookie的有效期限。

對於Web瀏覽器而言,每臺Web 服務器最多能夠支持20個cookie。

 

Cookie相關方法:

Cookie(String name, String value)

httpServletResponse.addCookie(Cookie cookie)

cookie.getName()

 

 

HttpSession對象:

getSession()

getSession(bool create)

 

setAttribute(String name, Object value)

getAttribute(String name)

getAttributeNames()

 

getId():得到HttpSession標識符

invalidate():這個方法強制Session過時,並將綁到到Session上的全部對象都解除綁定

 

getMaxInacitveInterval():瞭解一個HttpSession在用戶最後一次訪問以後還能夠維持多久。

setMaxInactiveInterval():傳遞0,則Session永遠不過時

 

 

添加到HttpSession中的值不必定是String,能夠爲任意Java對象,只要它的類實現了java.io.Serializable接口便可,以便當Servlet容器認爲有必要的時候,保存的對象能夠序列化成一個文件或者保存到數據庫中,例如,當容器的內存快要用完的時候。仍然能夠將非序列化的對象保存在HttpSession中,可是若是Servlet容器試圖將它們序列化,將會以失敗了結,並拋出異常。

 

 

HttpSession中保存的值不發送到客戶端,這與其餘的Session管理方法不一樣。而是Servlet容器爲它建立的每個HttpSession生成一個惟一標識符,並將這個標識符做爲一個token發送給瀏覽器,通常是做爲一個名爲JSESSIONID的cookie,或者做爲一個jsessionid參數添加到URL後面。在後續的請求中,瀏覽器會將這個token發送回服務器,使服務器可以知道是哪一個用戶在發出請求。不管Servlet容器選擇用哪種方式傳輸session標識答,那都是在後臺自動完成的,不須要你去作額外的處理工做。

相關文章
相關標籤/搜索