【Session】session把id号存在cookie中、session的URL重写把id加载URL上、购物车(关闭浏览器、禁用cookie)

来源:互联网 发布:ipad安装下载软件 编辑:程序博客网 时间:2024/06/07 00:33

1、session的默认存放时间是30分钟

session的时间可以在web.xml中配置

 <session-config>  <session-timeout>60</session-timeout>  </session-config>
可以采用代码的方式摧毁session

session.invalidate()

2、关闭浏览器仍然可以找到session

session把id号存在cookie中,存储在浏览器的内存中,关闭浏览器,cookie销毁。

我们可以设置cookie的有效时间,这样即使关闭浏览器,用户还可以带着id找到session。

package com.xiaozhi.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class SessionDemo extends HttpServlet{public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{HttpSession session = request.getSession();session.setAttribute("name", "洗衣机");//获取session的id将其保存在cookie中30分钟String id = session.getId();Cookie cookie = new Cookie("JSESSIONID", id);cookie.setMaxAge(30 * 60);cookie.setPath("/HelloJavaWeb");response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{super.doPost(req, resp);}}

第一次访问会创建两个cookie,session自己创建的cookie放在内存中,程序创建的放在本地硬盘


重启浏览器,浏览器带着cookie来找session,session还是原来的session


3、如果浏览器禁用cookie,那么可以使用URL重写的方式通过URL带着id。

package com.xiaozhi.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class SessionDemo extends HttpServlet{public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{HttpSession session = request.getSession();session.setAttribute("name", "洗衣机");String url1=response.encodeURL("/HelloJavaWeb/servlet/BuyServlet");String url2=response.encodeURL("/HelloJavaWeb/servlet/PayServlet");response.getWriter().write("<a href="+url1+">buy</a>");response.getWriter().write("<a href="+url2+">pay</a>");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{super.doPost(req, resp);}}

再就是重定向的URL重写是这样子的:

response.encodeRedirectURL(

4、使用session实现购物车功能

ListBookServlet

package com.xiaozhi.controller;import java.io.IOException;import java.io.PrintWriter;import java.io.Serializable;import java.util.LinkedHashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//首页,列出所有书public class ListBookServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();//先得到Session才能对URL编码request.getSession();out.print("本站有如下商品<br/>");Map <String,Book>map=Db.getAll();for(Map.Entry<String, Book> entry:map.entrySet()){Book book=entry.getValue();//URL编码String url=response.encodeURL(request.getContextPath()+"/servlet/BuyServlet?id="+book.getId());String str="<a target=\"_blank\" href='"+url+"'>"+book.getName()+"购买"+"</a><br/>";out.print(str);}}}class Db{private static Map<String,Book> map=new LinkedHashMap<String,Book>();static {map.put("1", new Book("1","JavaWeb开发","老k","一本好书"));map.put("2", new Book("2","jdbc开发","老张","一本好书"));map.put("3", new Book("3","spring开发","老li","一本好书"));map.put("4", new Book("4","struts开发","老张","一本好书"));map.put("5", new Book("5","android开发","老bi","一本好书"));}public static Map getAll(){return map;}}class Book implements Serializable{private String id;private String name;private String author;private String description;public Book() {super();    }public Book(String id, String name, String author, String description) {this.id = id;this.name = name;this.author = author;this.description = description;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}
BuyServlet

package com.xiaozhi.controller;import java.io.IOException;import java.io.PrintWriter;import java.util.LinkedList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class BuyServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();String id=request.getParameter("id");Book book=(Book)Db.getAll().get(id);HttpSession session=request.getSession(false);//关闭浏览器仍然能访问到数据String cookieId = session.getId();          Cookie cookie = new Cookie("JSESSIONID", cookieId);          cookie.setMaxAge(30 * 60);          cookie.setPath("/HelloJavaWeb");          response.addCookie(cookie);                 //从session中得到用户购买的商品集合List <Book> list=(List)session.getAttribute("list");if(list==null){list=new LinkedList<Book>();session.setAttribute("list", list);}list.add(book);String url=response.encodeRedirectURL(request.getContextPath()+"/servlet/ListCartServlet");response.sendRedirect(url);}}
ListCartServlet

package com.xiaozhi.controller;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;public class ListCartServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();HttpSession session=request.getSession(false);if(session==null){out.write("您没有购买任何商品");return;}List<Book> list=(List) session.getAttribute("list");out.write("你购买了如下商品"+"<br/>");for(Book book:list){out.write(book.getName()+"<br/>");}}}

关闭浏览器,购物车的东西还在,禁用cookie,也可以实现购物车功能。



0 0