java web-如何實現IE禁用cookie後繼續使用session

方法一:


首先要明白:session是在服務器端創建並保存在服務器端,當代碼中創建session時會相應地創建sessionID保存在服務器端,同時服務器向瀏覽器響應信息時會以cookie形式 (其實就是“JSESSION:sessionID”的鍵值對)返回並保存到瀏覽器本地中。一旦當前瀏覽器的進程要取服務器對應的保存在session的信息時候,就會取出剛纔保存在cookie中對應的sessionID和服務器端的sessionID進行對比,相同就能取出你想要的信息,不能就不能取出。


好了,明白這一點後,我們就可以即使瀏覽器禁止了cookie也能用session。因爲在一般情況下(即沒禁時候),我們不需把sessionID保存到cookie中,因爲一般情況下瀏覽器會自動的;然而當禁止時候,就需要我們主動的把sessionID寫入到cookie中。那麼問題就解決了。



主動把sessionID寫到cookie中

public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {

	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	//先用一次Session,就會自動創建Session的id
	HttpSession session=request.getSession();
	session.setAttribute("mess","你關閉了瀏覽器我還是給你看到session");
	//自己把SessionID保存在cookie中
	Cookie cookie=new Cookie("JSESSIONID", session.getId());
	//設置cookie保存時間
	cookie.setMaxAge(60*20);
	//被創建的cookie返回瀏覽器
	response.addCookie(cookie);
	out.println("添加Session成功!");
}


直接取就可以了:

String mess=(String)request.getSession().getAttribute("mess");
out.println(mess);



方法二:


不用保存SessionID到cookie中,而是動態地把當前用戶的SessionID添加到程序的各超鏈接或轉發地址中,那麼就可以確保用戶的唯一。response.encodeRedirectURL(url)是一個進行URL重寫的方法, 使用這個方法的作用是爲了在原來的url後面追加上Jsessionid 。 目的是保證即使在客戶端瀏覽器禁止了cookie的情況下,服務器端仍然能夠對其進行事務跟蹤。


例如這樣:

功能:物品加入購物車後,點擊返回主頁面,主頁面顯示剛纔加入到購物車的物品,當然了,這裏是考慮瀏覽器禁止cookie情況下。

//動態改寫URL
String url = response.encodeRedirectURL("/UserManager/BuyBookCL");
PrintWriter.println("<a href='"+url+"'>加入購物車</a>");
//在返回時也要加入 URL地址重寫
String url = response.encodeRedirectURL("/UserManager/home");
PrintWriter.println("<a href='"+url+"'>返回主頁面</a><br/>");





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章