1. 程式人生 > 其它 >七、Cookie、Session

七、Cookie、Session

7.1、會話:

會話:使用者開啟一個瀏覽器,點選了很多超連結,訪問多個web資源,關閉瀏覽器,這個過程可以稱之為會話;

有狀態會話:一個同學來過教師,下次再來教室,我們會知道這個同學,曾經來過,稱之為有狀態會話;

一個網站,怎麼證明你來過?

客戶端 服務端

  1. 伺服器給客戶端一個信件,客戶端下次訪問服務端帶上這個信件:Cookie

  2. 伺服器登入你來過了,下次你來的時候我來匹配你:Session

7.2、儲存會話的兩種技術

Cookie

  • 客戶端技術(響應,請求)

Session

  • 伺服器技術,利用這個技術,可以儲存使用者的會話資訊?

常見:網站登入之後,下次登入就不用在登入了,第二次訪問伺服器會快取你的使用者資訊

7.3、Cookie

  1. 從請求中拿到cookie資訊

  2. 伺服器響應給客戶端 cookie

    //Cookie,伺服器從客戶端獲取
    Cookie[] cookies = req.getCookies();//這個返回陣列,說明Cookie可以存在多個
    cookie.getName();//獲取cookie的名字
    cookie.getValue();
    //伺服器給客戶響應一個cookie
    //System.currentTimeMillis() 獲得的是自1970-1-01 00:00:00.000 到當前時刻的時間距離,型別為long。
    Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
    //儲存這個網頁記錄多少天,到了時間就會失效
    cookie.setMaxAge(24*60*60);
    //給響應新增一個cookie
    resp.addCookie(cookie);

cookie:一般會儲存在本地的使用者目錄下appData

一個網站cookie是否存在上限

  • 一個cookie只能儲存一個資訊

  • 一個web站點可以給瀏覽器傳送多個cookie,最多存放20個cookie

  • Cookie大小有限制4kb

  • 300個cookie瀏覽器上限

刪除Cookie

  • 不設定有效期,關閉瀏覽器,自動失效

  • 設定有效期時間為0

編碼解碼

URLEncoder.encode("李永輝","utf-8")
URLDecoder.decode(cookie.getValue(),"UTF-8")
​

7.4、Session(重點):

什麼是session:

  • 伺服器會給每一個使用者(瀏覽器)建立一個Session物件

  • 一個Session獨佔一個瀏覽器,只要瀏覽器沒有關閉,這個Session就存在

  • 使用者登入之後,整個網站都可以訪問!—>儲存使用者的資訊;儲存購物車的資訊……

Session和Cookie的區別:

  • Cookie是把使用者的資料寫給使用者的瀏覽器,瀏覽器儲存(可以儲存多個)

  • Session是把使用者的資料寫到使用者的獨佔Session中,伺服器端儲存(儲存重要的資訊,減少伺服器資源的浪費)

  • Session物件由伺服器建立

使用場景:

  • 儲存一個登入使用者的資訊

  • 在整個網站中經常會使用的資料,儲存在Session中

使用Session:

package com.lyh.servlet;
​
import com.lyh.pojo.Students;
​
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
​
public class SessionDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解決亂碼問題
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到Session
        HttpSession session = req.getSession();
        //給Session中存東西
        session.setAttribute("name",new Students("李永輝",1));
        //獲取Session的id
        String id = session.getId();
        //獲得Session是不是建立
        if (session.isNew()){
            resp.getWriter().write("session建立成功,id為:"+id);
        }else {
            resp.getWriter().write("session已經存在伺服器中,id為:"+id);
        }
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //解決亂碼問題
    req.setCharacterEncoding("UTF-8");
    resp.setCharacterEncoding("UTF-8");
    resp.setContentType("text/html;charset=utf-8");
    //得到Session
    HttpSession session = req.getSession();
    Students name = (Students) session.getAttribute("name");
    resp.getWriter().write(name+"");
​
​
}

會話自動過期:web.xml設定

<!--設定Session預設的失效時間--><session-config>    <!--1分鐘之後Session自動失效-->    <session-timeout>1</session-timeout></session-config>

Session和cookie的區別:

  • cookie是把使用者的資料寫給使用者的瀏覽器,瀏覽器可以儲存(可以儲存多個)

  • Session把使用者的資料寫到使用者獨佔Session中,伺服器端儲存(儲存一個)

使用場景:

  • 儲存一個登入使用者的資訊;

  • 購物車資訊;

  • 在整個網站中經常會使用的資料,我們將它儲存在Session中;