在Servlet中,會話的維持是經過HttoSession對象進行的,Web容器會自動爲每個Http會話都賦予一個惟一的"會話編號"(session 會話 ID)保存爲每一個 Web 客戶端的 cookie,客戶端的每次請求都會自動帶有全部cookie,Web容器對於客戶端的後續請求可使用接收到的 cookie 來識別。html
HTTP 是一種"無狀態"協議,這意味着每次客戶端檢索網頁時,客戶端打開一個單獨的鏈接到 Web 服務器,服務器會自動不保留以前客戶端請求的任何記錄。java
(建議不要使用這種方式來維持 session 會話,由於不少瀏覽器不支持 cookie。)瀏覽器
Servlet 提供了 HttpSession 接口,該接口提供了一種跨多個頁面請求或訪問網站時識別用戶以及存儲有關用戶信息的方式。服務器
使用這個接口能夠建立和管理一個 HTTP 客戶端和 HTTP 服務器之間的 session 會話,會話持續一個指定的時間段,跨多個鏈接或頁面請求。cookie
HttpServletRequest對象提供了getSession()方法,經過這個方法,Servlet就能夠得到用戶當前會話對象的引用。session
HttpSession session = request.getSession();
返回與當前請求相關聯的會話,若是當前請求尚未一個相關聯的會話,就建立一個並返回。網站
HttpSession session = request.getSession(boolean create);
返回與當前請求相關聯的會話,若是當前請求尚未一個相關聯的會話,且參數值爲true,則就建立一個並返回;若參數值爲false,將返回null。url
HttpSession 對象中可用的幾個重要的方法以下:spa
序號 | 方法 & 描述 |
---|---|
1 | public Object getAttribute(String name) 該方法返回在該 session 會話中具備指定名稱的對象,若是沒有指定名稱的對象,則返回 null。 |
2 | public Enumeration getAttributeNames() 該方法返回 String 對象的枚舉,String 對象包含全部綁定到該 session 會話的對象的名稱。 |
3 | public long getCreationTime() 該方法返回該 session 會話被建立的時間,自格林尼治標準時間 1970 年 1 月 1 日午夜算起,以毫秒爲單位。 |
4 | public String getId() 該方法返回一個包含分配給該 session 會話的惟一標識符的字符串。 |
5 | public long getLastAccessedTime() 該方法返回客戶端最後一次發送與該 session 會話相關的請求的時間自格林尼治標準時間 1970 年 1 月 1 日午夜算起,以毫秒爲單位。 |
6 | public int getMaxInactiveInterval() 該方法返回 Servlet 容器在客戶端訪問時保持 session 會話打開的最大時間間隔,以秒爲單位。 |
7 | public void invalidate() 該方法指示該 session 會話無效,並解除綁定到它上面的任何對象。 |
8 | public boolean isNew( 若是客戶端還不知道該 session 會話,或者若是客戶選擇不參入該 session 會話,則該方法返回 true。 |
9 | public void removeAttribute(String name) 該方法將從該 session 會話移除指定名稱的對象。 |
10 | public void setAttribute(String name, Object value) 該方法使用指定的名稱綁定一個對象到該 session 會話。 |
11 | public void setMaxInactiveInterval(int interval) 該方法在 Servlet 容器指示該 session 會話無效以前,指定客戶端請求之間的時間,以秒爲單位。 |
示例以下:code
package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class SessionTrack extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(true); // 若是session會話不存在,則建立一個session對象 Date createTime = new Date(session.getCreationTime()); // 獲取session建立時間 Date lastAccessTime = new Date(session.getLastAccessedTime()); //獲取最後訪問時間 String welcome = null; int visitCount = 0; //記錄訪問次數 if (session.isNew()) { //檢查是否新訪問者 welcome = "您是第1次訪問本網站"; } else { visitCount = (Integer) session.getAttribute("visitCount"); visitCount = visitCount + 1; welcome = "您是第"+visitCount+"次訪問本網站"; } session.setAttribute("visitCount", visitCount); out.println(welcome+"<br>"); out.println("您的session會話 ID是"+session.getId()+"<br>"); out.println("您的session會話 ID建立時間"+createTime+"<br>"); out.println("您的session會話 ID最後訪問時間"+lastAccessTime+"<br>"); } }
URL重寫:
在Servlet中,對超連接可採用response.encodeURL("url")。進行URL重寫用response.sendRedirect( response.encodeURL("url") )時,它能把用戶的Session追加在網址末尾,可保證用戶在不一樣頁面時Session對象是同樣的。