Session

一、Session简单介绍

  在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

二、Session和Cookie的主要区别

  • Cookie是把用户的数据写给用户的浏览器。
  • Session技术把用户的数据写到用户独占的session中。
  • Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

三、Java提供的操作Session的API

    //得到会话ID
    String id = session.getId(); 
    //存值
    session.setAttribute(name, value);  
    //取值
    session.getAttribute(name);   
    //移除值
    session.removeAttribute(name);

四、Session的创建与销毁

创建:如果有在servlet里面调用了 request.getSession()

销毁:session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

  • 关闭服务器
  • session会话时间过期。 有效期过了,默认有效期: 30分钟。

五、 Session的简单应用

5.1、简单购物车

CartServlet 代码

response.setContentType("text/html;charset=utf-8");                                            
//1. 获取要添加到购物车的商品id                                                                            
int id = Integer.parseInt(request.getParameter("id")); // 0 - 1- 2 -3 -4                       
String [] names = {"Iphone7","小米6","三星Note8","魅族7" , "华为9"};                                   
//取到id对应的商品名称                                                                                  
String name = names[id];                                                                       
                                                                                               
//2. 获取购物车存放东西的session  Map<String , Integer>  iphoen7 3                                       
//把一个map对象存放到session里面去,并且保证只存一次。                                                              
Map<String, Integer> map = (Map<String, Integer>) request.getSession().getAttribute("cart");   
//session里面没有存放过任何东西。                                                                          
if(map == null){                                                                               
	map = new LinkedHashMap<String , Integer>();                                               
	request.getSession().setAttribute("cart", map);                                            
}                                                                                              
//3. 判断购物车里面有没有该商品                                                                             
if(map.containsKey(name)){                                                                     
	//在原来的值基础上  + 1                                                                            
	map.put(name, map.get(name) + 1 );                                                         
}else{                                                                                         
	//没有购买过该商品,当前数量为1 。                                                                        
	map.put(name, 1);                                                                          
}                                                                                              
                                                                                               
//4. 输出界面。(跳转)                                                                                 
response.getWriter().write("<a href='product_list.jsp'><h3>继续购物</h3></a><br>");                
response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a>");                          
	                                                                                       

移除Session中的元素

强制干掉会话,里面存放的任何数据就都没有了:session.invalidate(); 

从session中移除某一个数据:session.removeAttribute("cart");

HttpSession session = request.getSession();
session.removeAttribute("cart");
response.sendRedirect("cart.jsp");

cart.jsp

	<h2>您的购物车的商品如下:</h2>
	<%
		//获取map
		Map<String , Integer> map = (Map<String, Integer>)session.getAttribute("cart");
		//遍历map
		if(map != null){
			for(String key:map.keySet()){
				int value = map.get(key);
				//key:商品名称,value:商品个数				
	%>			
				<h3>名称:<%=key %>,数量:<%=value %></h3><br>
	<%			
			}
		}
	%>
	<a href="ClearCartServlet"><h4>清空购物车</h4></a>

product_list.jsp

	<a href="CarServlet?id=0"><h3>Iphone7</h3></a><br>
	<a href="CarServlet?id=1"><h3>小米6</h3></a><br>
	<a href="CarServlet?id=2"><h3>三星Note8</h3></a><br>
	<a href="CarServlet?id=3"><h3>魅族7</h3></a><br>
	<a href="CarServlet?id=4"><h3>华为9</h3></a><br>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值