Session细节:
1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
①默认情况下不是的。
②如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
Cookie ck = new Cookie("JSESSIONID",session.getId());
ck.setMaxAge(60*60);
response.addCookie(ck);
package jason.lh.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session
HttpSession session = request.getSession();
System.out.println(session);
//期望客户端关闭后,session也能相同
Cookie ck = new Cookie("JSESSIONID",session.getId());
ck.setMaxAge(60*60);
response.addCookie(ck);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
2.客户端不关闭,服务器端关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不会丢失
(这种情况下可能会造成数据丢失,像在购物车里添加商品还未结算,服务器重新启动的话 可能会造成数据丢失)
session的钝化:
在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化:
在服务器启动后,将session文件转化为内存中的session对象即可。
##(tomcat服务器已经帮我们把钝化和活化的事情完成了,我们不需要考虑
idea中完成不了,它可以钝化,但是活化不了)——操作(20_会话技术_Session_细节2)
【本地硬盘操作】
3.session的失效时间?
①服务器关闭
②session对象调用invalidate()。
③session默认失效时间 30分钟。
在D:\apache-tomcat-9.0.22\conf\web.xml下
配置修改
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4.session的特点
①session用于存储一次会话的多次请求的数据,存在服务器端
②session可以存储任意类型,任意大小的数据