在禁用cookie時操作Session


介紹

當客戶端禁用了cookie時,造成session無法訪問,此時我們可以使用URL重寫來解決這個問題

URL重寫要求將站點中的所有超鏈接都進行改造,在超鏈接后用一個特殊的參數JSESSIONID保存當前瀏覽器對應session的編號,這樣一來,當用戶點擊超鏈接訪問服務器時,服務器可以從URL后的參數中分析出JSESSIONID,從而找到對應的sesison使用.

URL重寫之前,要先創建出session,才能進行重寫操作

--------------------------------

response.encodeURL(String url);

//--如果是普通的地址用這個方法

response.encodeRedirectURL(String url);

//--如果地址是用來進行重定向的,用這個方法

---------------------------------

以上兩個方法可以實現URL重寫,這兩個方法非常的智能,只要發現瀏覽器發送了任何Cookie過來,就認為當前客戶端沒有禁用Cookie,就不會在進行URL重寫

---------------------------------

舉例:

重寫URL

jsp頁面

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" session="false"%>
 2 <!DOCTYPE HTML>
 3 <html>
 4     <head>
 5         <title>My JSP 'index.jsp' starting page</title>
 6         <meta http-equiv="pragma" content="no-cache">
 7         <meta http-equiv="cache-control" content="no-cache">
 8         <meta http-equiv="expires" content="0">
 9     </head>
10     <body>
11         <h1>商品列表</h1>
12         <%
13         //在url后拼接上session的id 防止在禁用cookie時候影響session的使用
14             HttpSession session = request.getSession(); 15             String url1=response.encodeURL(request.getContextPath()+"/servlet/BuyServlet?prod=小米手機"); 16             String url2=response.encodeURL(request.getContextPath()+"/servlet/BuyServlet?prod=海爾洗衣機"); 17             String url4=response.encodeURL(request.getContextPath()+"/servlet/PayServlet"); 18         
19         
20         
21          %>
22         <a href="<%= url1 %>">小米手機</a><br/><br/>
23         <a href="<%= url2 %>">海爾洗衣機</a><br/><br/>
24         <a href="<%= request.getContextPath() %>/servlet/BuyServlet?prod=阿迪王">阿迪王皮鞋</a><br/><br/>
25         <a href="<%= url4 %>">支付</a><br/><br/>
26     </body>
27 </html>

 

存入Session

servlet

 1 package cn.tedu.session;  2 
 3 import java.io.IOException;  4 
 5 import javax.servlet.ServletException;  6 import javax.servlet.http.Cookie;  7 import javax.servlet.http.HttpServlet;  8 import javax.servlet.http.HttpServletRequest;  9 import javax.servlet.http.HttpServletResponse; 10 import javax.servlet.http.HttpSession; 11 /** 12  * 案例:購物車 13  */
14 public class BuyServlet extends HttpServlet { 15 
16     public void doGet(HttpServletRequest request, 17  HttpServletResponse response) 18  throws ServletException, IOException { 19         response.setContentType("text/html;charset=utf-8"); 20         
21         //獲取商品信息 控制字符集影響
22         String prod = request.getParameter("prod"); 23         byte[] bytes = prod.getBytes("iso8859-1"); 24         prod = new String(bytes, "utf-8"); 25         
26         //獲取session, 保存數據到session中
27         HttpSession session = request.getSession(); 28         session.setAttribute("prod", prod); 29         
30         //創建一個Cookie, 這個Cookie的名字和path要和服務器創建的Cookie一樣
31         Cookie cookie = new Cookie("JSESSIONID", session.getId()); 32         cookie.setPath(request.getContextPath()+"/"); 33         
34         cookie.setMaxAge(3600);//設置最大生存時間為1小時
35         
36  response.addCookie(cookie); 37         
38         response.getWriter().write("成功將["+prod+"]商品加入了購物車..."); 39  } 40 
41     public void doPost(HttpServletRequest request, 42  HttpServletResponse response) 43  throws ServletException, IOException { 44  doGet(request, response); 45  } 46 
47 }

 

讀取session

servlet 

 1 package cn.tedu.session;  2 
 3 import java.io.IOException;  4 
 5 import javax.servlet.ServletException;  6 import javax.servlet.http.HttpServlet;  7 import javax.servlet.http.HttpServletRequest;  8 import javax.servlet.http.HttpServletResponse;  9 import javax.servlet.http.HttpSession; 10 /** 11  * 案例:購物車 12  */
13 public class PayServlet extends HttpServlet { 14 
15     public void doGet(HttpServletRequest request, 16  HttpServletResponse response) 17  throws ServletException, IOException { 18         response.setContentType("text/html;charset=utf-8"); 19         
20         //獲取為當前客戶端服務的session, 從中取出商品信息
21         HttpSession session = request.getSession(false); 22         
23         if(session != null){ 24             String prod = (String) session.getAttribute("prod"); 25             response.getWriter().write("成功為["+prod+"]商品支付10000$....."); 26         }else{ 27             response.getWriter().write("您還沒有將任何商品加入購物車....."); 28  } 29  } 30 
31     public void doPost(HttpServletRequest request, 32  HttpServletResponse response) 33  throws ServletException, IOException { 34  doGet(request, response); 35  } 36 
37 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM