http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com Session Tracking Servlet HTTP giao thức Stateless, nghĩa Client thu nhận trang Web, Client mở kết nối riêng rẽ tới Web Server Server tự động không giữ ghi yêu cầu trước từ Client Sau cách để trì session Web Client Web Server: Sử dụng Cookie Một Webserver gán Session ID cookie tới Web Client với yêu cầu liên tục từ Client, chúng chấp nhận sử dụng cookie nhận Đây khơng phải cách hiệu nhiều trình duyệt khơng hỗ trợ cookie, không đề nghị bạn sử dụng thủ tục để trì Session Sử dụng trường Hidden Form Một Webserver gửi trường Hidden Form với Session ID sau: Entry nghĩa là, Form đệ trình, tên giá trị cho tự động bao liệu GET POST Mỗi trình duyệt Web gửi yêu cầu trở lại, giá trị session_id sử dụng để lần theo dấu trình duyệt web khác Đây cách hiệu để lần theo dấu Session việc click Hypertext Link (ví dụ dạng ) khơng tạo đệ trình Form, trường Hidden Form hỗ trợ việc theo dấu Gerneral Session Viết lại URL Bạn phụ thêm số liệu bổ sung cuối URL mà nhận diện Session đó, Server liên kết với Session Identifier với liệu lưu giữ session Ví dụ, với http://vietjack.com/file.htm;sessionid=12345, Session Identifier đính kèm session=12345, mà truy cập Web Server để nhận diện Client http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com Viết lại URL cách tốt để trì session làm việc cho trình duyệt chúng không hỗ trợ Cookie, hạn chế là: bạn tạo URL động để gán cho Session ID trang trang HTML tĩnh Đối tượng HttpSession Servlet Ngoài ba cách đề cập trên, Servlet cung cấp HttpSession Interface, cung cấp cách để nhận diện người sử dụng mà lướt qua nhiều yêu cầu trang, tới Website để lưu thông tin người dùng Servlet container sử dụng Interface để tạo Session HTTP Client HTTP Server Session tồn khoảng thời gian cho, qua nhiều kết nối yêu cầu trang từ người dùng Bạn nhận đối tượng HttpSession việc gọi phương thức public getSession() HttpServletRequest sau: HttpSession session = request.getSession(); Bạn cần gọi phương thức request.getSession() trước bạn gửi nội dung tài liệu tới Client Bảng liệt kê số phương thức quan trọng mà có sẵn với đối tượng HttpSession STT Phương thức Miêu tả public Object getAttribute(String name) Phương thức trả đối tượng bind với name cho Session này, trả nul khơng có đối tượng bind với tên public Enumeration getAttributeNames() Trả Enumeration đối tượng String chứa tên tất đối tượng bind tới Session public long getCreationTime() http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com Trả thời gian Session tạo, tính tốn mili giây từ 1/1/1970 GMT public String getId() Phương thức trả String chứa Identifier gán tới Session public long getLastAccessedTime() Phương thức trả thời gian cuối mà Client gửi yêu cầu mà liên kết với Session này, với số mili giây từ 1/1/1970 public int getMaxInactiveInterval() Phương thức trả khoảng thời gian tối đa, giây, mà Servlet container giữ Session mở truy cập client public void invalidate() Phương thức vơ hiệu hóa session khơng kết nối đối tượng bind với public boolean isNew( Phương thức trả true Client chưa biết Session public void removeAttribute(String name) Phương thức gỡ bỏ đối tượng bind với tên cho từ session 10 public void setAttribute(String name, Object value) Phương thức bind đối tượng tới Session này, sử dụng tên cung cấp http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com 11 public void setMaxInactiveInterval(int interval) Phương thức xác định thời gian, giây, yêu cầu từ Client trước Servlet container vơ hiệu hóa session Ví dụ Session Tracking Servlet Ví dụ miêu tả cách sử dụng đối tượng HttpSession để tìm thời gian creation thời gian last-accessed cho Session Chúng ta liên kết Session với yêu cầu chưa tồn // Import required java libraries import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // Extend HttpServlet class public class SessionTrack extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Create a session object if it is already not created HttpSession session = request.getSession(true); // Get session creation time Date createTime = new Date(session.getCreationTime()); // Get last access time of this web page Date lastAccessTime = new Date(session.getLastAccessedTime()); String title = "Welcome Back to my website"; Integer visitCount = new Integer(0); String visitCountKey = new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("ABCD"); // Check if this is new comer on your web page if (session.isNew()){ title = "Welcome to my website"; session.setAttribute(userIDKey, userID); } else { visitCount = (Integer)session.getAttribute(visitCountKey); visitCount = visitCount + 1; userID = (String)session.getAttribute(userIDKey); } session.setAttribute(visitCountKey, visitCount); // Set response content type response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "\n"; out.println(docType + "\n" + "" + title + "\n" + "\n" + "" + title + "\n" + "Session Infomation\n" + "\n" + "\n" + " Session infovalue\n" + "\n" + " id\n" + " " + session.getId() + "\n" + "\n" + " Creation Time\n" + " " + createTime + " \n" + "\n" + " Time of Last Access\n" + " " + lastAccessTime + " \n" + "\n" + " User ID\n" + " " + userID + " \n" + "\n" + " Number of visits\n" + " " + visitCount + http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com "\n" + ""); "\n" + } } Biên dịch SessionTrack tạo entry thích hợp web.xml file Bây chạyhttp://localhost:8080/SessionTrack hiển thị kết sau lần đầu tiên: Welcome to my website Session Infomation Session info Giá trị id 0AE3EC93FF44E3C525B4351B77ABB2D5 Creation Time Tue Jun 08 17:26:40 GMT+04:00 2010 Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2010 User ID ABCD Number of visits Bây chạy lần thứ hai, cho kết sau: Welcome Back to my website Session Infomation http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Page 1 http://vietjack.com/ servlets/index.jsp Copyright © vietjack.com info type Giá trị id 0AE3EC93FF44E3C525B4351B77ABB2D5 Creation Time Tue Jun 08 17:26:40 GMT+04:00 2010 Time of Last Access Tue Jun 08 17:26:40 GMT+04:00 2010 User ID ABCD Number of visits Xóa Session Data Servlet Dưới cách để xóa Session Data: • Gỡ bỏ thuộc tính cụ thể: Bạn gọi phương thức public void removeAttribute(Stringname) để xóa value mà liên kết với key cụ thể • Xóa tồn Session: Bạn gọi phương thức public void invalidate() để loại bỏ tồn Session • Thiết lập timeout cho Session: Bạn gọi phương thức public void setMaxInactiveInterval(int interval) để thiết lập timeout cho Session • Log out người sử dụng: Với Server mà hỗ trợ Servlet 2.4, bạn gọilogout để loại Client khỏi Web Server vơ hiệu hóa tồn Session • Cấu hình web.xml: Nếu bạn sử dụng Tomcat, ngồi phương thức trên, bạn định cấu hình timeout Session web.xml file sau: config> 15