Session:主菜
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
- 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止(关闭浏览器或者服务器)
- 在一次会话范围内,通过Cookie和Session可以共享数据
使用步骤
-
获取HttpSession对象:
HttpSession session = request.getSession();
-
使用HttpSession对象:
设置属性void setAttribute(String name, Object value)
获取属性
Object getAttribute(String name)
删除属性
void removeAttribute(String name)
Session设置属性
HttpSession session = request.getSession();
session.setAttribute("asd","123456");
Session获取属性
HttpSession session = request.getSession();
String asd = (String) session.getAttribute("asd");
//默认返回Object类型,对于已知类型需要进行强转
Session的遍历
HttpSession session = request.getSession();
Enumeration<String> s=session.getAttributeNames();
//类似迭代器
while(s.hasMoreElements()){
System.out.println(s.nextElement()+
"="+
session.getAttribute(s.nextElement()));
//这里的s.nextElement()就对应了每一个键名 通过他取值就可以了
}
实现原理
- Session的实现是依赖于Cookie的。
注意
持久化存储
当客户端关闭后,服务器不关闭
- 默认情况下。获取的session不是同一个。
- 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);
客户端不关闭,服务器关闭后
- 获取的session不是同一个(地址不同),但数据是同一个,不会丢失。tomcat确保数据不丢失,自动完成以下工作
- session的钝化:
在服务器正常关闭之前,将session对象系列化到硬盘上 - session的活化:
在服务器启动后,将session文件转化为内存中的session对象即可。
注意: idea不能实现活化,因为在IDEA重新启动服务器的过程中会删除work目录,而session钝化后的文件就在work目录中。也就是说通过idea部署的文件,关闭服务器后,session中的数据就没了。
真正开发过程中,是部署到tomcat服务器的,因此不必在意这一点。
- session的钝化:
session销毁
-
服务器关闭
-
session对象调用invalidate() 。
-
session默认失效时间 30分钟
选择性配置修改web.xml
可以修改tomcat目录—>conf—>web.xml
也可以在项目中的web.xml
配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session的特点
- session用于存储一次会话的多次请求的数据,存在服务器端
- session可以存储任意类型,任意大小的数据
-
session与Cookie的区别:
- session存储数据在服务器端,Cookie在客户端
- session没有数据大小限制,Cookie有
- session数据安全,Cookie相对于不安全