Servlet提供了session和cookie进行会话管理,其中session是保存在服务器端的,而cookie是保存在客户端的。
Session:
Servlet规范中,提供了三种机制进行会话跟踪:SSL会话、Cookies、URL重写。
SSL(Secure Socket Layer安全套接字层)是在HTTPS协议中使用的加密协议,它可以让采用SSL的服务器认证采用SSL的客户端,并且在它们之间保持加密连接,客户和服务器都产生名叫“会话密钥“的东西。
Cookies:服务器接收到客户请求之后,产生session,并且将Session ID返回,这个Session ID是以Cookies的形式来保存的,Cookie的名称为JSESSIONID,当浏览器关闭时,这个Cookie就消失了。
URL重写:如果客户端禁用Cookie,可以通过URL重写来进行session会话管理,要和客户端会话,就需要将所有发往客户端的URL进行编码,HttpServletResponse接口中提供了encodeURL()和encodeRedirectURL()方法实现,encodeRedirectURL()方法是在调用sendRedirect()方法之前调用,这时候可以观察url中为:http://localhost:8080/Servlet001 ;jsessionid=1234?name=h&psw=1
Cookie:
Java Servlet API提供了javax.servlet.http.Cookie类用于创建Cookie,Cookie保存在客户端,当客户端重新发送请求时,顺道把此URL对应的Cookie发送过去,Cookie有生命周期,提供了setMaxAge()方法,设置为0表示删除Cookie,为负数表示关闭浏览器时删除,为正数时Cookie会被保存到硬盘上。
Servlet规范提供了HttpSessionBindingListener接口,如果某个对象实现了该接口,如果这个对象被绑定到了Session中或者从Session中删除,Servlet容器会通知这个对象,对象接受到通知后,可以做一些初始化工作和清除的工作。