程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> HTTP Cookie/Session,httpcookiesession

HTTP Cookie/Session,httpcookiesession

編輯:JAVA綜合教程

HTTP Cookie/Session,httpcookiesession


一、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之上來使用的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved