1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。(HttpSession)
2.快速入门:
(1)获取HttpSession对象:
HttpSession session = request. getSession();
(2)使用HttpSession对象 :
object getAttribute(String name )
void setAttribute(String name, object value)
void removeAttribute(String name)
3、原理:
Session的实现是依赖于Cookie
4、细节问题:
(1)当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下不是。
*如果需要相同,则可以创建Cookie ,键为JSESSIONID, 设置最大存活时间,
让cookie持久化保存。
代码:
Cookie C = new Cookie("JSESSIONID", session. getId());
C. setMaxAge(60*60) ;
respgnse . addCookie(c);
(2)客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失,所以tomcat会自动完成以下工作:
session的钝化:
*在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化:
*在服务器启动后,将session文件转化为内存中的session对象即可
(3) session的失效时间?
1.服务器关闭
2. session对象调用invalidate()方法 。
3. session默认失效时间30分钟
可以选择性配置修改
<session-config>
<session- timeout>30</session-timeout>
</session-config>
5、Session的特点:
1. session用于存储一次会话的多次请求的数据,存在服务器端
2. session可以存储任意类型,任意大小的数据
6、session与Cookie的区别:
1. session存储数据在服务器端,Cookie在客户端
2. session没有数据大小限制,Cookie有
3. session数据安全,Cookie相对于不安全
例子
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/SessionServlet1")
public class SessionServlet1 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("key","value");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/SessionServlet2")
public class SessionServlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Object key = session.getAttribute("key");
System.out.println(key);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}