會話技術_Session_細節

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章