1、session对象代表一次用户会话。一次用户会话是指:从客户端浏览器链接服务器开始,到客户端浏览器与服务器断开为止,这个过程就是一次对话。
2、session通常用于跟踪用户的会话信息,如判断用户是否登录系统,或者在购物车应用中,用于跟踪用户购买的商品
3、session范围内的属性可以在多个页面之间共享。一旦关闭浏览器,即session结束,session范围内的属性将全部丢失
4、session对象是HttpSession实例,包括两个常用的方法:①setAttribute():设置session范围内attName属性的值为attName属性的值为attValue
②getAttribute(String attName): 返回session范围内的 attName属性的值
<%@page contentType="text/html;charset=GBK" language="java" errorPage=""%> <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>选择物品购买</title></head> <body> <form method="post" action="24processbuy.jsp"> 书籍:<input type="checkbox" name="item" value="book"/><br/> 电脑:<input type="checkbox" name="item" value="computer"/><br/> 汽车:<input type="checkbox" name="item" value="car"/><br/> <input type="submit" value="购买"/> </form> </body> </html>
<%@page contentType="text/html;charset=GBK" language="java" errorPage=""%> <%@page import="java.util.*" %> <% Map<String,Integer> itemMap = (Map<String,Integer>)session.getAttribute("itemMap"); if(itemMap == null){ itemMap = new HashMap<String, Integer>(); itemMap.put("书籍", 0); itemMap.put("电脑", 0); itemMap.put("汽车", 0); } String[] buys = request.getParameterValues("item"); if(buys != null) for(String item: buys){ if(item.equals("book")){ int num1 = itemMap.get("书籍").intValue(); itemMap.put("书籍", num1 + 1); }else if (item.equals("computer")){ int num2 = itemMap.get("电脑").intValue(); itemMap.put("电脑", num2 + 1); }else if(item.equals("car")){ int num3 = itemMap.get("汽车"); itemMap.put("汽车" , num3 + 1); } } session.setAttribute("itemMap", itemMap); %> <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-trasitional.dtd"> <html> <head> <title>deal the buy </title> </head> <body> 你购买的商品:<br/> 书籍:<%=itemMap.get("书籍") %>本<br/> 电脑:<%=itemMap.get("电脑") %>台<br/> 汽车:<%=itemMap.get("汽车") %>辆<br/> <a href="23sessionTest.jsp">再次购买</a> </body> </html>5、itemMap放在session中保证,itemMap在一次对话中有效,这使得该购物系统可以反复购买,只要浏览器不关,购买的物品信息就不会丢失
6、不要仅仅为了两个页面之间交换信息,就将该信息放入session范围内。如果仅仅为了两个页面交换信息,可以将该信息放入request范围内,然后forward请求即可。
考虑session本身的目的,通常只应该把与用户会话状态相关的信息放入session范围内
7、session机制通常用于保存客户端的状态信息,这些状态信息需要保存到Web服务器的硬盘上,所以要求session里的属性值必须是可序列化的,否则将会引发不可序列化的异常。