session会话

javaWeb

【掌握】session的使用

一,session会话

1.1 概念

由客户端第一次向服务器发送请求开始,至多个请求的结束中间的过程称之为会话,javaweb的会话对象,用于保存当前会话过程中需要保存的数据,在下次请求或响应中都可以获取会话中的数据

1.2 工作原理

1)浏览器发出请求到服务器。
2)服务器会根据需求生成Session对象,并且给这个Session对象一个编号,一个编号对应一个Session对象
3)服务器把需要记录的数据封装到这个Session对象里,然后把这个Session对象保存下来。
4)服务器把这个Session对象的编号放到一个Cookie里,随着响应发送给浏览器
5)浏览器接收到这个cookie就会保存下来
6)当下一次浏览器再次请求该服务器服务,就会发送该Cookie
7)服务器得到这个Cookie,取出它的内容,它的内容就是一个Session的编号!!!
8)凭借这个Session编号找到对应的Session对象,然后利用该Session对象把保存的数据取出来!

1.3 使用

1.3.1 添加session

指的是向session中存储数据,因为session的创建是由服务器自动创建的,直接通方法可以获取到当前请求用户的session对象并进行数据的添加

		//请求对象提供了直接获取session对象的方法
		HttpSession session = request.getSession();
		//将数据以key-value的形式存储在session作用域中
		session.setAttribute("session", "session数据");
		//session存储数据可以看作是map集合

1.3.2 查询session

通过session提供的方法通过指定的name获取value

		//请求对象提供了直接获取session对象的方法
		HttpSession session = request.getSession();
		//session提供了直接获取指定数据与全部数据的方法
		//可以直接通过指定key获取session中value的值
		System.out.println(session.getAttribute("session"));
		//也可以先获取所有的key之后遍历获取数据(不经常使用)
		HashMap<String, Object> map=new HashMap<>();
		//通过方法获取全部的name数组
		String[] valueNames = session.getValueNames();
		 for (String string : valueNames) {
			 map.put(string, session.getAttribute(string));
		}
		 System.out.println(map);

1.3.3 修改session

session中存储数据的结构类似于map,所以key不允许重复,所以对session的修改就是重新设置相同key的session数据

		//请求对象提供了直接获取session对象的方法
		HttpSession session = request.getSession();
		//将数据以key-value的形式存储在session作用域中
		session.setAttribute("session", "修改后的session数据");
		session.setAttribute("session1", "修改后的session数据1");
		//session存储数据可以看作是map集合

1.3.4 删除session

		HttpSession session = request.getSession();
		//删除session是使客户端请求时无法获取指定session中的指定数据
		//1、通过修改将指定数据设置为null
		session.setAttribute("session", null);
		//2、通过session提供的方法将指定数据映射删除
		session.removeAttribute("session");
		//3、清除对应session的缓存
		Cookie cookie=new Cookie("JSESSIONID", "");
		cookie.setMaxAge(0);
		response.addCookie(cookie);
		//4、通过session提供的方法将session对象进行删除
		session.invalidate();

1.4 session的生命周期

Session保存在服务器端。为了获得更高的存取速度,服务器一般把Session放在内存里。每个用户都会有一个独立的Session。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。

Session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。

Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。

session的活跃时间是由tomcat进行决定配置的,可以通过相应的配置文件进行修改

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

也可以通过相应的方法设置session的活跃时间

session.setMaxInactiveInterval(30);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值