cookie和session的结合实现多浏览器共享session

在会话过程中,保存会话数据有两种方式:session和cookie,这两种方式存在的场合不一样。

session主要保存在服务器端,从会话建立直到消亡,而cookie存在于客户端浏览器,当然也可通过服务器的某些方法获得。

 这样在解决共享session时,对于session与浏览器的对应存在着一对多的联系,此时我们需要了解到对于动态网站这样的开发,通常服务器会把session的唯一标识通过cookie的 形式写回到浏览器在用户第一次建立连接时,如果浏览器禁用cookie就在url地址后面加上session标识。

因而,问题就变成如何将sessionid写回到多个浏览器或多个连接地址后面。

此类方式对解决实现记录用户操作非常有用。

下面是购买过程的servlet实现:

//1.得到用户想买的书
  String id = request.getParameter("id");
  Book book = (Book) DB.getMap().get(id);
  
  //2.把用户购买的书加在session中用于管理所有书的集合了
  HttpSession session = request.getSession();
  Cookie cookie = new Cookie("JSESSIONID",session.getId());
  cookie.setMaxAge(30*60);
  cookie.setPath("/day06");
  response.addCookie(cookie);
  List<Book> list = (List<Book>) session.getAttribute("list");
  if(list==null){
   list = new ArrayList<Book>();
   session.setAttribute("list", list);
  }
  list.add(book);
  
  //3.跳转到购物车显示列表
  String url = response.encodeRedirectUrl("/day06/servlet/ListCartServlet");
  //request.getRequestDispatcher("/servlet/ListCartServlet").forward(request, response);
  //response.sendRedirect("/day06/servlet/ListCartServlet");没禁用cookie时采用的方法
  response.sendRedirect(url);

这样不管用户是否禁用cookie都可以实现共享session

猜你喜欢

转载自youngstream.iteye.com/blog/2070530