会话技术-session

##场景 在WEB开发中,服务器中能够为每一个用户浏览器建立一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认状况下),当浏览器访问其它程序时,其它程序能够从用户的session中取出该数据,为用户服务。 session和cookie的主要区别在于: cookie技术是把用户的数据写给用户的浏览器 session技术把用户的数据写到用户独占的session中 session对象由服务器建立,开发人员能够调用request对象的getSession方法获得session对象。html

request.getSession(false) 只获取,不建立web

##session的实现原理 ###原理 session是基于cookie的session是一个没有设定maxAge的cookie浏览器

输入图片说明

###如何防止关闭浏览器后存储的用户信息被删除 思路:向客户端回写一个名称与session相同的cookie覆盖,并设定maxAge服务器

HttpSession session = request.getSession();
String sessionId = session.getId()
Cookie cookie = new Cookie("JSESSIONID",sessionId);
cookie.setPath(requst.getContextPath());
cookie.setMaxAge(30*60);
session.setAttribute("name","洗衣机");

##session的工做原理 ###用户浏览器禁用cookie的解决方案cookie

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter():
request.getSession();
String url1 = response.encodeURL("/test-web/servlet/sessionDemo1");
String url2 = response.encodeURL("/test-web/servlet/sessionDemo2");
pw.print("<a href='"+url1+"'>购买</a><br/><a href="'" + url2 + "'>收藏</a>");
//response.encodeURL()方法将自动判断浏览器是否禁用cookie,若禁用,则重写URL,后面拼接JSESSIONID

##用session完成简单的购物session

public class ListAllServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        HttpSession session = request.getSession();
        PrintWriter pw = response.getWriter();
        pw.print("本网站有以下商品: <br/>");
        Map<Integer, Book> map = Db.getAll();
        Set<Entry<Integer, Book>> entrySet = map.entrySet();
        for (Entry<Integer, Book> entry : entrySet) {
            Book book = entry.getValue();
            String url = response.encodeURL("/test-web/BuyServlet?id=" + book.getId());
            pw.print(book.getName() + "<a href='" + url + "' target=_blank>购买</a><br/>");
        }
        pw.print("当前已经购买了:<br/>");

        List<Book> list = (List<Book>) session.getAttribute("list");
        if (list != null) {
            for (Book book : list) {
                if(book!=null){
                    pw.print(book.getName()+"<br/>");
                }
            }
        }
    }
}
public class BuyServlet extends HttpServlet {
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String id = request.getParameter("id");
        Book book = Db.getAll().get(Integer.valueOf(id));
        HttpSession session = request.getSession(false);
        List list = (List) session.getAttribute("list");
        if (list == null) {
            list = new ArrayList<Book>();
        }
        list.add(book);
        session.setAttribute("list", list);
        String url = request.getContextPath() + "/ListAllServlet";
        url = response.encodeRedirectUrl(url);
        response.sendRedirect(url);
        // 此处用rediret 防止刷新再次购买
    }
}
相关文章
相关标签/搜索