会话的创建
HttpSession对象提供了一个isNew()方法,使用该方法时应当小心。确定用
户是否以及拥有一个会话的最好的办法时获得当前会话。如果没有会话存在,那
么可以强迫用户登录。只有在成功登陆之后,才能创建一个新的会话对象。这个
顺序是一个好的实践,因为它能防止用户避开安全机制。
可以通过调用方法getSession(false)获得会话对象。如果用户没有会话,那
么该方法返回null。然后,可以强迫用户在每次开始一个新会话之前进行登录。
在这种情况下,当getSesion(false)返回null时,将客户端浏览器重定向到web应
用程序的登录页面。如果用户已经有一个会话,或者getSession(false)方法返回
的值不是null,那么可以继续使用该会话。
HttpSession session = request.getSesion(false);
if (session == null){
response.sendRedirect("login.jsp");
}
你可能会试图执行一下操作:
HttpSession session = request.getSession(true);
if (sesion.isNew()){
response.sendRedirect("login.jsp");
}
不要这样做。
在该代码中,我们像往常一样请求会话对象。然而,因为我们在getSession()
方法中将参数值设为了true,所以如果没有会话存在,那么服务器将创建一个新
会话。尽管该代码这样做似乎是正确的,但它实际上引入了一个安全性问题。一
些人可以通过重复请求url来创建大量会话对象。这些会话是作为内存堆积在每条
请求的服务器上的,因此,攻击者可以占用大量的服务器资源。最终,攻击者会
使服务器变得很不稳定。