在禁用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 }

 

posted @ 2017-09-07 09:36  狂妄的老头  阅读(4716)  评论(0编辑  收藏  举报