1. 程式人生 > 其它 >儲存會話的兩種技術:Cookie、Session

儲存會話的兩種技術:Cookie、Session

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

儲存會話的兩種技術

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

session:伺服器技術,利用它可以儲存使用者的會話資訊,把資訊或資料放在Session中。

常見例子:網站登入之後,下次就不用再登入了。

Cookie

1、從請求中拿到cookie資訊

2、伺服器相應給客戶端cookie

Cookie[] cookies = req.getCookies();//獲得cookie
cookie.getName(); //獲得cookie中的key
cookie.getValue(); //獲得cookie的value
Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+""); //新建一個cookie
cookie.setMaxAge(24*60*60); //設定cookie的有效期
resp.addCookie(cookie);//響應給客戶端

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


Q:一個網站cookie是否存在上限?
一個Cookie只能儲存一個資訊
一個web站點可以給瀏覽器傳送多個cookie,每個站點最多存放20個cookie
Cookie大小有限制4Kb
300個cookie瀏覽器上限

如何刪除cookie
1、不設定有效期,關閉瀏覽器,自動失效。
2、設定有效期為0

Session(重點)
什麼是session?
伺服器會給每一個使用者(瀏覽器)建立一個Session物件
一個Session獨佔一個瀏覽器,只要瀏覽器沒有關閉,這個session就存在。
使用者登入以後,整個網站都可以訪問。 儲存使用者的資訊、儲存購物車的資訊


Session和cookie的區別
Cookie是把使用者的資料寫給使用者的瀏覽器,瀏覽器儲存(可以儲存多個)
Session把使用者的資料寫到使用者獨佔Session中,伺服器端儲存(儲存重要的資訊,減少伺服器資源的浪費)
Session物件由服務建立。

使用場景:儲存一個登入使用者的資訊、購物車資訊、在整個網站中經常會使用的資料

使用Session

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 Person("龍哥",1));

//獲取Session的ID
String sessionId = session.getId();

//判斷Session是不是新建立
if(session.isNew()){
resp.getWriter().write("session建立成功,ID:"+sessionId);
}else {
resp.getWriter().write("session已經在伺服器中存在了,ID:"+sessionId);
}
//Session在建立的時候做了什麼事情
//Cookie cookie = new Cookie("JSESSIONID",sessionId);
//resp.addCookie(cookie);

}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}


//得到Session
HttpSession session = req.getSession();

Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());


HttpSession session = req.getSession();  //獲得session
session.removeAttribute("name"); //取消name
session.invalidate(); //手動登出session


會話自動過期:web.xml配置
<!--設定Session預設的失效時間-->
<session-config>
<!--15分鐘後session自動失效,以分鐘為單位-->
<session-timeout>15</session-timeout>
</session-config>