1、Session是什么?
服务器端会话技术,在一次会话的多次请求中共享数据,数据存放在服务器的内存中。
(浏览器从打开到关闭是一次会话)
2、基本介绍
session机制采用的是在服务器端保持 HTTP 状态信息的方案。为了加速session的读取和存储,web服务器中会开辟一块内存用来保存服务器端所有的session,每个session都会有一个唯一标识sessionid,根据客户端传过来的jsessionid(cookie中),找到对应的服务器端的session。为了防止服务器端的session过多导致内存溢出,web服务器默认会给每个session设置一个有效期, (30分钟)若有效期内客户端没有访问过该session,服务器就认为该客户端已离线并删除该session。
原理:依赖cookie,存储jsssionid
session会在cookie中储存一个Jsessionid的东西来标识每个用户然后会在本地生成对应ID的文件来储存相应的值,与cookie相比多了不少安全性
3、常用API
1、getid()方法:得到sessionid.
2、invalidate()方法:让session立刻失效。
3、getAttribute(String key):根据key获取该session中的value。
4、setAttribute(String key,Object value):往session中存放key-value。
5、removeAttribute(Stringkey):根据key删除session中的key-value。
6、getServletContext():得到ServletContext。
7、setMaxInactiveInterval(long timeout)/getMaxInactiveInterval:设置/获取session的最大有效时间。
8、getCreationTime方法:获取session的创建的时间。
9、getLastAccessedTime方法:获取session最后一次访问的时间。
10、getSession():从HttpServletRequest中获取session。
4、Session什么情况会销毁
Session在服务器关闭
当服务器重启后又进行了session对象活化(又读入了内存)
2、Session默认失效时间30分钟
在工程中web.xml中修改存活时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>
默认配置是配置在config下的web.xml中
3、当浏览器关闭后,服务器不关闭,两次获得session不是同一个。
如果想要想要相同
Cookie ck = new Cookie(“JSESSIONID”,sesssion.getId());
ck.setMaxAge(3600);
response.addCookie(c);