Cookie
//創建一個Cookie對象 Cookie cookie = new Cookie("username","JACK"); //在客戶端存儲的時間(生命周期)單位是秒 7天 7*24*60*60 //如果這里設置為0 就表示客戶端不保存該cookie 即臨時cookie //如果設置為-1 就表示客戶端關閉之后就刪除該cookie 也可以稱之為臨時cookie cookie.setMaxAge(-1); //設置cookie在客戶端存放的路徑 如果不設置,默認在本項目名稱目錄下 cookie.setPath("/"); //將創建完好的cookie存放在response相應對象中 response.addCookie(cookie);
如果瀏覽器端拒絕存儲cookie信息,就會導致JSESSIONID的值不能正常到達客戶端,
那么客戶端向服務器發送請求時,就無法將JSESSIONID的值帶回到服務器中,從而導致找不到自己的會話Session
怎么解決:我們可以使用URL地址重寫的辦法解決
因為cookie在客戶端只允許存儲4k的數據,那么實際上cookie存儲了3k數據就已經到達了一個極限了,cookie就會顯得力不從心了,
所以在B/S交互中就需要一個更大的存儲數據對象,這就是session存在的重要起因。
Session會話
當用戶通過瀏覽器訪問服務器的應用程序時,程序會為每一個用戶創建一個session對象,實際上就是在內存中分配一塊內存給該用戶使用
該對象可以存儲大量的數據;
如果瀏覽器端禁用了cookie功能,那么服務器端傳遞給瀏覽器端的jsessionid就沒有辦法保存,
這時候當用戶再一次向服務器發送請求時,服務器會因為無法找到為用戶創建好的session,
就會再次創建一個session對象,這時就需要我們考慮如何為服務器減少創建session對象的次數;
使用response對象的兩個方法,保證服務端和瀏覽器端使用的是用一個jsessionid值。
URL重寫
1--servlet中涉及向客戶端輸出頁面元素的時候,可以在相應的請求地址外面包上一層方法,
也就是說使用response.encodeURL(“請求地址”);為請求地址添加一個JSESSIONID的值
2--servlet中涉及跳轉到新的頁面時,可以使用response.encodeRedirectURL(“請求地址”);為請求地址添加一個JSESSIONID的值 3--在jsp頁面中,涉及到的請求地址,可以使用jstl標簽中url的value屬性進行設置 前提是需要導入兩個jar包 jstl-1.2.jar 和 standard-1.1.2.jar <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 如:<a href=<c:url value="encodeURL.action"></c:url>>encodeURL</a> 4--在jsp頁面中使用:<a href="<%=response.encodeURL("encodeURL.action")%>">encodeURL</a>