一、HTTP協議 HTTP協議是一個無狀態協議,伺服器無法判斷若幹個請求是否來自同一個瀏覽器,無法與瀏覽器進行會話。 二、HTTP會話控制:Cookie Cookie技術是使用在瀏覽器端的一種緩存技術, 在瀏覽器第一次向伺服器發出請求,在伺服器端會創建Cookie對象,並以鍵值對的形式在響應頭中返回 ...
一、HTTP協議
HTTP協議是一個無狀態協議,伺服器無法判斷若幹個請求是否來自同一個瀏覽器,無法與瀏覽器進行會話。
二、HTTP會話控制:Cookie
Cookie技術是使用在瀏覽器端的一種緩存技術,
在瀏覽器第一次向伺服器發出請求,在伺服器端會創建Cookie對象,並以鍵值對的形式在響應頭中返回。下一次向伺服器發送請求時,會在請求頭中將Cookie信息攜帶。
1.Cookie的創建與返回
在伺服器端通過 new Cookie(key, value)的方式創建。
並以response.addCookie(cookie)的方式返回給瀏覽器。
(2)Cookie的獲取
在伺服器端通過request.getCookies()方法獲取,得到一個Cookie數組
如果Cookie數組不包含Cookie,則Cookie數組為null。
(3)Cookie的時效(setMaxAge(seconds))
會話級:保存在瀏覽器運行過程記憶體中,瀏覽器一關閉,Cookie就失效。(seconds為負數),預設。
持久化:保存在本地文件系統中,保存(seconds)長。(seconds為正數)。
(4)刪除Cookie
setMaxAge(0)
三、HTTP會話控制:Session
Session技術是使用在伺服器端的一種緩存技術,但是它依賴於Cookie。
1.瀏覽器請求信息中不包含JSESSIONID的Cookie
伺服器端會通過getSession來創建一個Session對象。
創建一個name值為JSESSIONID的Cookie返回給瀏覽器
2.請求信息中包含JSESSIONID的Cookie
根據JSESSIONID的值,在伺服器端查找已經存在的Session對象
①若能找到,則返回找到的Session對象(Session對象以鍵值對的形式保存在伺服器端)
②若找不到,則創建一個Session對象,並返回JSESSIONID的Cookie(包含偽造JSESSIONID的情況)
3.Session對象持久化
HttpSession session = request.getSession(); String id = session.getId(); Cookie cookie = new Cookie("JSESSIONID", id); cookie.setMaxAge(30); response.addCookie(cookie);
4.設置Session對象的有效時間
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10);
5.設置Session強制失效
HttpSession session = request.getSession();
session.invalidate();
6.若瀏覽器禁用Cookie,可以通過Session的URL重寫
HttpSession session = request.getSession(); session.setAttribute("attrName", "testValue"); String url = "target url"; url = response.encodeURL(url); response.sendRedirect(url);
★如果目標頁面也需要使用保持Session會話,則同樣需要實現URL重寫
String url = response.encodeURL(request.getContextPath()+"/nextTarget.jsp");
四、 需要註意的幾點:
1.Session的空閑時間:Session對象沒有被瀏覽器端訪問的時間間隔
2.關於 request.getSession()
當前Servlet是客戶端訪問的第一個Web資源則創建Session對象。這裡有一個特殊情況,就是JSP頁面上使用page指令指定了session="false",這時不會創建Session對象。
3.關於 session=“false”
當前頁面禁用session隱含變數,但是可以使用其他顯式的HttpSession對象。
五、總結:
說白了,Cookie就是伺服器端和瀏覽器端通信的一個識別碼。
HTTP是一個無狀態的協議,伺服器和瀏覽器之間的會話是通過Cookie來維繫的(JSESSIONID),Session是建立在Cookie之上來使用的。