Session的工作原理

session是服务器端的一个集合,可以存储任何东西。session最重要的特性,是可以识别客户。

1.Session的工作原理

当我们的Servlet需要使用Session时,执行下面的代码

HttpSession session = request.getSession();//取出session
session.setAttribute("goods1","Scoat");//session存数据
session.getAttribute("goods1");//session取数据

如果是第一次取session,服务器会创建一个session对象(session本身是一个map集合),并且存入服务器的session集合中以sessionId为标识键,也就是根据sessionId即可取到对应session的引用。同时使用session Servlet还获得了一个sessionId,在响应时把这个sessionId以cookie的形式发给了客户端。如果客户访问其它同一域的Servlet,这个sessionId会跟着请求上传到服务器。那么如果请求的另一个Servlet也要使用session,会先检查有没有这个保存sessionId的Cookie,如果有则直接到session集合中取对应的session引用返回给要使用的Servlet,所以,只要客户端存在这个sessionId,不管请求哪个Servlet,都可以拿到同一个session。所以Session就可以给不同的请求存储数据。

2.Session过期

要保证session能够跨请求存储数据必须保证下面两个条件必须满足

(1).客户浏览器不能关闭

因为session会给客户保存一个sessionId,这个id是作为临时cookie存在客户浏览器缓存当中,如果关闭浏览器,缓存就没了,sessionId自然也就消失了。重新打开浏览再请求,就是一个全新的请求,服务器会创建一个新的session,之前的session就没法用了。

(2).请求不能超过session的过期时间

服务器的session如果始终没有使用,保留着就是浪费服务器的资源,所以服务器会定期检查session的最后访问时间,如果这个时间超出session设置的过期时间,服务器就会销毁这个session,那么客户端即使把sessionId又传上来,服务器也找不到它的session了,只会再重新创建一个新的session。

3.Session生命周期的操作方法

session.setMaxInactiveInterval(20 *  60);//设置session过期时间
session.invalidate();//销毁session的方法
session.getCreationTime();//获得session的创建时间
session.getLastAccessedTime();//获得session最后一次被使用的时间

你可能感兴趣的:(Java进阶学习)