JavaWeb 之 Session(会话) 总结

1、java中会话对应的类型

javax.servlet.http.HttpSession session,简称Session(会话)

2、会话状态存放位置

Cookie 可以将会话状态保存在客户端;
HttpSession 可以将会话状态保存在服务器端

3、HttpSession 对象

是一个会话级别的对象,一次会话对应一个HttpSession 对象

4、一次完整的会话

用户打开浏览器,在浏览器上发送多个请求,直到最终关闭浏览器,表示一次完整的会话

5、Session 列表

在Web 容器中有一个Session 列表,用于维护大量的HttpSession 对象

6、Session 的实现原理

思考:为什么当前会话的每一次请求可以获取到属于自己的会话对象?

打开浏览器,在浏览器上首次发送请求;
服务器会创建一个HttpSession 对象,该对象代表一次会话;
同时生成HttpSession 对象和与之对应的Cookie 对象,并且Cookie 对象的name 是JSESSIONID,Cookie 的Value 是32位长度的字符串;
服务器将Cookie 的Value 和HttpSession 对象绑定到Session 列表中;
服务器将Cookie 完整发送给浏览器客户端;
浏览器客户端将Cookie 保存到缓存中,只要浏览器不关闭,Cookie 不会消失;
当再次发送请求时,会自动提交缓存当中的Cookie;
服务器接收到Cookie,验证该Cookie 的name 是JESSIONID,然后获取Cookie 的value
通过Cookie 的value 去Session 列表中检索对应的HttpSession 对象

原理图:
JavaWeb 之 Session(会话) 总结_第1张图片
代码:
设置

HttpSession session = request.getSession();
session.setAttribute("username","zhangsan");

获取

HttpSession session = request.getSession();
Object username = session.getAttribute("username");

安全退出

Httpsession session = request.getSession(false); // 若当前没有Session 对象,则返回null,默认为true,若没有Session对象则新建对象
if(session != null){
	session.invalidate();
	// 登陆拦截
	Object obj = session.getAttribuete("user");
	if(obj != null){
		OK!
	}
}

你可能感兴趣的:(JavaWeb)