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可以存儲任意類型,任意大小的數據