1. Trang chủ
  2. » Thể loại khác

session tracking trong servlet

7 102 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 289 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Session Tracking trong Servlet HTTP là một giao thức Stateless, nghĩa là mỗi khi một Client thu nhận một trang Web, thì Client mở một kết nối riêng rẽ tới Web Server và Server tự động k

Trang 1

Session Tracking trong Servlet

HTTP là một giao thức Stateless, nghĩa là mỗi khi một Client thu nhận một trang Web, thì

Client mở một kết nối riêng rẽ tới Web Server và Server tự động không giữ bất kỳ bản ghi nào của các yêu cầu trước đó từ Client

Sau đây là 3 cách để duy trì session giữa Web Client và Web Server:

Sử dụng Cookie

Một Webserver có thể gán một Session ID duy nhất như là một cookie tới mỗi Web Client

và với các yêu cầu liên tục từ Client, chúng có thể được chấp nhận bởi sử dụng cookie đã nhận được

Đây không phải là cách hiệu quả bởi vì nhiều khi trình duyệt không hỗ trợ một cookie, vì thế tôi sẽ không đề nghị bạn sử dụng thủ tục này để duy trì các Session

Sử dụng các trường Hidden Form

Một Webserver có thể gửi một trường Hidden Form cùng với một Session ID duy nhất như sau:

<input type = "hidden" name = "sessionid" value = "12345">

Entry này nghĩa là, khi Form này được đệ trình, tên và giá trị đã cho tự động được bao trong dữ liệu GET hoặc POST Mỗi khi trình duyệt Web gửi yêu cầu trở lại, thì giá trị session_id có thể được sử dụng để lần theo dấu của các trình duyệt web khác nhau Đây có thể là một cách hiệu quả để lần theo dấu của Session nhưng việc click trên một Hypertext Link (ví dụ dạng <A HREF >) không tạo ra một sự đệ trình Form, vì thế các trường Hidden Form này cũng không thể hỗ trợ việc theo dấu các Gerneral Session

Viết lại URL

Bạn có thể phụ thêm một số dữ liệu bổ sung ở cuối mỗi URL mà nhận diện Session đó, và Server có thể liên kết với Session Identifier này với dữ liệu nó đã lưu giữ về session đó

Ví dụ, với http://vietjack.com/file.htm;sessionid=12345, thì Session Identifier được đính kèm

là session=12345, mà có thể được truy cập tại Web Server để nhận diện Client đó

Trang 2

Viết lại URL là cách tốt hơn để duy trì các session và làm việc cho các trình duyệt khi chúng không hỗ trợ các Cookie, nhưng hạn chế ở đây là: bạn sẽ tạo mỗi URL động để gán cho một Session ID bởi vì trang là trang HTML tĩnh

Đối tượng HttpSession trong Servlet

Ngoài ba cách được đề cập ở trên, Servlet cung cấp HttpSession Interface, cung cấp một cách để nhận diện một người sử dụng mà lướt qua nhiều hơn một yêu cầu trang, hoặc tới một Website và để lưu thông tin về người dùng đó

Servlet container sử dụng Interface này để tạo một Session giữa một HTTP Client và một HTTP Server Session này tồn tại trong một khoảng thời gian đã cho, qua nhiều hơn một kết nối hoặc yêu cầu trang từ người dùng

Bạn sẽ nhận đối tượng HttpSession bằng việc gọi phương thức public là getSession() của

HttpServletRequest như sau:

HttpSession session = request.getSession();

Bạn cần gọi phương thức request.getSession() trước khi bạn gửi bất kỳ nội dung tài liệu

nào tới Client Bảng dưới đây liệt kê một số phương thức quan trọng mà có sẵn với đối tượng HttpSession

STT Phương thức và Miêu tả

1

public Object getAttribute(String name)

Phương thức này trả về đối tượng được bind với name đã cho trong Session này, hoặc trả về nul nếu không có đối tượng nào được bind với tên này

2 public Enumeration getAttributeNames()

Trả về một Enumeration của các đối tượng String chứa các tên của tất cả đối tượng được bind tới Session này

3 public long getCreationTime()

Trang 3

Trả về thời gian khi Session này được tạo, được tính toán bằng mili giây từ 1/1/1970 GMT

4 public String getId()

Phương thức này trả về một String chứa Identifier duy nhất được gán tới Session này

5 public long getLastAccessedTime()

Phương thức này trả về thời gian cuối cùng mà Client gửi một yêu cầu mà liên kết với Session này, với số mili giây từ 1/1/1970

6 public int getMaxInactiveInterval()

Phương thức này trả về khoảng thời gian tối đa, bằng giây, mà Servlet container sẽ giữ Session này được mở trong các truy cập client

7 public void invalidate()

Phương thức này vô hiệu hóa session này và không kết nối bất kỳ đối tượng nào được bind với nó

8 public boolean isNew(

Phương thức này trả về true nếu Client vẫn chưa biết về Session đó

9 public void removeAttribute(String name)

Phương thức này gỡ bỏ đối tượng được bind với tên đã cho từ session này

10 public void setAttribute(String name, Object value)

Phương thức này bind một đối tượng tới Session này, bởi sử dụng tên đã cung cấp

Trang 4

11 public void setMaxInactiveInterval(int interval)

Phương thức này xác định thời gian, bằng giây, giữa các yêu cầu từ Client trước khi

Servlet container sẽ vô hiệu hóa session này

Ví dụ về Session Tracking trong Servlet

Ví dụ này miêu tả cách sử dụng đối tượng HttpSession để tìm thời gian creation và thời

gian last-accessed cho một Session Chúng ta sẽ liên kết một Session mới với yêu cầu này

nếu nó chưa tồn tại

// 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 ( ); 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 =

"<!doctype html public \"-//w3c//dtd html 4.0 "

"transitional//en\">\n" ; out println(docType + "<html>\n" + "<head><title>" title + "</title></head>\n"

"<body bgcolor=\"#f0f0f0\">\n" "<h1 align=\"center\">" title + "</h1>\n" "<h2 align=\"center\">Session Infomation</h2>\n" "<table border=\"1\" align=\"center\">\n" + "<tr bgcolor=\"#949494\">\n" " <th>Session info</th><th>value</th></tr>\n" "<tr>\n" "

<td>id</td>\n" " <td>" session.getId() "</td></tr>\n"

"<tr>\n" " <td>Creation Time</td>\n" "

<td>" createTime + " </td></tr>\n"

"<tr>\n" " <td>Time of Last Access</td>\n"

" <td>" lastAccessTime + " </td></tr>\n"

"<tr>\n" " <td>User ID</td>\n" " <td>" userID + " </td></tr>\n" "<tr>\n"

" <td>Number of visits</td>\n" " <td>" visitCount +

Trang 5

"</td></tr>\n" "</table>\n"

"</body></html>" ); } }

Biên dịch SessionTrack trên và tạo entry thích hợp trong web.xml file Bây giờ

chạyhttp://localhost:8080/SessionTrack sẽ hiển thị kết quả sau trong lần đầu tiên:

Welcome to my website

Session Infomation

0

Bây giờ chạy lần thứ hai, nó sẽ cho kết quả sau:

Welcome Back to my website

Session Infomation

Trang 6

id 0AE3EC93FF44E3C525B4351B77ABB2D5

1

Xóa Session Data trong Servlet

Dưới đây là các cách để xóa các Session Data:

Gỡ bỏ một thuộc tính cụ thể: Bạn có thể gọi phương thức public void removeAttribute(Stringname) để xóa value mà liên kết với một key cụ thể

Xóa toàn bộ Session: Bạn có thể gọi phương thức public void invalidate() để loại

bỏ toàn bộ Session

Thiết lập timeout cho Session: Bạn có thể gọi phương thức public void setMaxInactiveInterval(int interval) để thiết lập timeout cho từng Session

Log out người sử dụng: Với các Server mà hỗ trợ Servlet 2.4, bạn có thể gọilogout để loại Client ra khỏi Web Server và vô hiệu hóa toàn bộ Session đó

Cấu hình web.xml: Nếu bạn đang sử dụng Tomcat, ngoài các phương thức trên,

bạn có thể định cấu hình timeout của Session trong web.xml file như sau:

<session-config> <session-timeout>15</session-timeout> </session-config>

Timeout được biểu diễn bằng phút, và ghi đè timeout mặc định là 30 phút trong Tomcat

Trang 7

Phương thức getMaxInactiveInterval() trong một Servlet trả về quãng thời gian timeout cho session đó bằng giây Vì thế neeys Session của bạn được định cấu hình là 15 phút trong web.xml, thì getMaxInactiveInterval() trả về 900

Ngày đăng: 02/12/2017, 22:28

TỪ KHÓA LIÊN QUAN