session和cookie的簡單用法

session和cookie都是能夠保存顧客狀態的技術,不過還是略有不同的。
Session :(服務器端)
• 適合保存大量的數據。
• 安全。
• 效率高
• Session跟蹤機制中需要cookie來保存和傳遞sessionId

Cookie:(客戶端)
• 不適合保存大量的數據。
• 不安全。
• 效率低


session將http狀態信息保存在服務器端的技術
獲取session的方法:

HttpSession session = request.getSession();

因爲session是同時也是作用域,故有getAttribute、setAttribute、removeAttribute方法:

session.getAttribute("name");獲取一個屬性
session.setAttribute(“name”,"value");設置一個屬性
session.removeAttribute("name");刪除一個屬性

當瀏覽器請求服務器時,如果session已經被創建,則返回已經創建的。如果未創建,則創建新的session。一個客戶端擁有一個session對象

session的一些常用方法:

session.getId();// 返回相關聯的session的id。
session.setMaxInactiveInterval(60*30);

以秒爲單位設置session的最大空閒時間(也可以在tomcat中的web.xml中中配置空閒時間)。

session.invalidate();// 強制session失效。和session.setMaxInactiveInterval(0)一樣

有時候會發現設置session立馬失效,當頁面再次訪問瀏覽器時,再次調用session.getId方法並輸出結果,發現此時的session地址和之前的session地址是一樣的。這是因爲瀏覽器cookie裏面存在一個sessionID信息,每次訪問服務器時都把這個傳遞過去,之前session已經被銷燬,則服務器會創建一個新的session對象,指向之前的地址。這就是爲什麼明明session已經銷燬了,再次訪問還存在的原因,後來的那個session對象已經不是之前的那個session對象了。

不然你還可以測試一下,在之前的session對象中存放一些數據進作用域,再把它銷燬,等頁面再次訪問時,纔去取之前存放在作用域中的數據,你會發現那些數據已經隨着之前那個session對象銷燬而消失了。

cookie將http狀態信息保存在客戶端的技術.
不是服務器直接讀取本地的cookie,而是瀏覽器讀cookie,而服務器讀瀏覽器發出的名爲cookie的請求頭信息。(通過httpwatcher觀察名爲cookie的頭信息)
創建cookie對象:

Cookie cookie = new Cookie(“uname”,“uname”);

cookie的一些常用方法:

 cookie.setMaxAge(3600*24) ;//設置cookie的有效期. 如果不設置有效時間cookie就不會被增加到客戶端硬盤上,只是寫到客戶端內存中(關閉瀏覽器或者斷電就會丟失信息)。

setValue();設置cookie的value值;
getName();獲取cookie的name屬性
getValue();獲取cookie的value屬性

 response.addCookie(cookie);// 響應信息中添加cookie
request.getCookies() ; //取得客戶端發來的所有cookie對象

getCookies()方法返回Cookie[]類型的數組,再用getName() getValue()來訪問它的Name和Value 讀取的不是客戶端硬盤或內存中的信息。而是瀏覽器發送給服務器的請求頭Cookie中的信息。

for (Cookie cookie : cookies) {
            System.out.println(cookie.getName()+"---"+cookie.getValue());
        }

session機制:
session是以cookie或URL重寫爲基礎來實現的,默認使用cookie來實現;

cookie方法來實現session機制:
Servlet規範規定實現session的cookie名稱強制爲jsessionid,在瀏覽器第一次請求的時候,服務器產生一個唯一的id,並把這個id設置給一個名叫jsessionid的cookie,然後再通過response的addcookie輸出到瀏覽器端;

URL重寫來實現session機制:
服務器的servlet在生成HTML頁面的時候需要用到response.encodeURL方法來編碼URL,該方法就是用來實現URL重寫功能的,這是因爲瀏覽器可能是因爲取消cookie功能,而未提供cookie,服務器爲了確保下次提交成功,必須確保生成給瀏覽器端的url帶有jsessionid。

發佈了37 篇原創文章 · 獲贊 23 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章