Session
*Cookie基于客户端,不安全,并且大小和个数的限制。
*Session域对象,范围一次会话范围,存个人相关的数据。
*setAttribute(String name,Object value);
*Object getAttribute(String name);
*String getId() 获取session的唯一的ID.
* void invalidate() 销毁session
Session(*****)
session的追踪 通过jsessionid=''在url中传送到服务器,
session的创建和销毁
第一次访问时 request.getSession(),创建session
销毁:
1,非正常关闭服务器
2.sesion的过期,默认30分钟
<session-config>
<session-timeout>30</session-timeout>
<session-config>
3.通过调用session.invalidate() 手动销毁session
Servlet中这样处理页面的加入购物车请求
// 获取请求参数
String id = request.getParameter( "id");
String[] names = new String[] { "手电筒", "电话" , "电视" , "冰箱" , "手表" };
// 把id翻译成名称
int idx = Integer. parseInt(id);
String name = names[idx - 1];
// 从Session中获取购物车,先获取session
HttpSession session = request.getSession();
// 获取购物车
Map<String, Integer> cart = (Map<String, Integer>) session
.getAttribute( "cart");
// 通过cart来判断是否是第一次访问
if (cart == null) {
cart = new HashMap<String, Integer>();
cart.put(name, 1);
session.setAttribute( "cart", cart);
} else {
// 不是第一次访问;判断是否包含该商品
if (cart.containsKey(name)) {
// 取取数量 加一
Integer count = cart.get(name);
count++;
cart.put(name, count);
// 再保存到session中;
session.setAttribute( "cart", cart);
} else {
// 不包含
cart.put(name, 1);
session.setAttribute( "cart", cart);
}
}
// 继续购物,去结算
response.setContentType( "text/html;charset=UTF-8");
response.getWriter()
.write( "<h3><a href='/JSP/session/CartList.jsp'>继续购物</a></h3> <h3><a href='/JSP/session/Pay.jsp'>去结算</a></h3>");
结算页面这样写
<%
//获取购物车
Map<String,Integer> cart=(Map<String,Integer>)request.getSession().getAttribute("cart") ;
if(cart!=null ){
//循环遍历
Set<String>keys=cart.keySet();
//循环keys,拿到商品的名称
for(String key:keys)
{
%>
<h2> 亲,您购买的商品是: <%=key %>,数量为: <%=cart.get(key) %></h2 >
<%
}
}
else{
%>
<h3> 亲,您还没有购买任何商品,请您去 <a href ='CartList.jsp'>败家</ a></ h3>
<%
}
%>