Thứ Năm, 27 tháng 10, 2016

Session Tracking(Cookie, HttpSession, URLRewritting)

I. Khái niệm về Session:

- Session được hiểu là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Một session được bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có được cấp một định danh (ID) khác nhau và nội dung được lưu trong thư mục thiết lập trong file php.ini (tham số session.save_path).

Có 3 kỹ thuật trong Servlet để xử lý Session:

Url Rewritting

HTTP Cookie

HttpSession


II. Các kỹ thuật xử lý Session:


1. Url Rewritting

A. Khái niệm:

Uniform Resource Locator (URL) là địa chỉ của một tài nguyên nằm trên Trang web.

- Session id có thể được gửi như 1 tham số:
https://www.blogger.com/blogger.g?blogID=9163428659843180977
- 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 đó:

- 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.
B. Ưu & Nhược điểm:
- Ưu điểm:
Có thể được nối khi gửi dữ liệu từ form HTML. Có thể được gửi cùng với nội dung động từ một Servlet. Là một cách tốt để duy trì phiên khi các trình duyệt không hỗ trợ cookie hoặc người dùng vô hiệu hóa sự hỗ trợ cho các tập tin cookie. 
+ 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ược điểm:
URL chỉ có thể được gửi thông qua các hyperlink trên trang Web. URL dài không thể lưu trữ nhiều thông tin do giới hạn chiều dài URL(255) URL có chứa thông tin dữ liệu có thể nhìn thấy, vì vậy nó không phải an toàn
+ Chỉ làm việc vs các documents được tạo tự động.
+ Sẽ tạo mỗi URL động để gán cho một Session ID bởi vì trang là trang HTML tĩnh.
C. Hidden fields:
- Một máy chủ web có thể gửi một trường mẫu HTML ẩn cùng với một session ID duy nhất như sau:
<input type="hidden" name="sessionid" value="12345">

- Ý nghĩa của đoạn code trên là khi các mẫu được gửi, tên và giá trị xác định được tự động đưa vào GET hoặc POST dữ liệu. Mỗi lần khi duyệt web sẽ gửi yêu cầu trở lại, sau đó giá trị session_id có thể được sử dụng để giữ theo dõi 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.

- Servlet đọc giá trị của fields bằng phương thức request.getParameter().

- Tuy được hỗ trợ rộng rãi và làm việc được với user vô danh. Đổi lại chỉ làm việc được với các form sinh tự động. Bên cạnh đó là còn khá hạn chế khi không làm việc được với document tĩnh và không xử lý được trường hợp đóng trình duyệt.


2. HTTP Cookie
A. Khái niệm:
-  Cookie là 1 đoạn dữ liệu được ghi vào đĩa cứng hoặc bộ nhớ của máy người sử dụng. Nó được trình duyệt gởi ngược lên lại server mỗi khi browser tải 1 trang web từ server. Có hai loại cookie:

Cookie của bên thứ nhất do trang web hiển thị trong thanh địa chỉ đặt.

Cookie của bên thứ ba đến từ các trang web khác có các mục như quảng cáo hoặc hình ảnh được nhúng vào trang bạn đang truy cập.

- Những thông tin được lưu trữ trong cookie hoàn toàn phụ thuộc vào website trên server. Mỗi website có thể lưu trữ những thông tin khác nhau trong cookie, ví dụ thời điểm lần cuối ta ghé thăm website, đánh dấu ta đã login hay chưa, v.v...

- Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.

- Cơ chế hoạt động của cookie:

B. Ưu & Nhược điểm:
- Ưu điểm:
 Dễ cài đặt, tùy biến linh động và được duy trì cho đến khi đóng trình duyệt.
- Nhược điểm:
+ Độ bảo mật kém nên thường người dùng sẽ tắt cookie để tự bảo vệ thông tin cá nhân của mình.
+ Không phải mọi trình duyệt đều hỗ trợ Cookie.
3. HttpSession
A. Khái niệm:
- Servlet cung cấp HttpSession interface để xác định một người dùng trên nhiều hơn một trang yêu cầu hoặc truy cập vào một trang web và lưu trữ thông tin về người dùng đó.
HttpSession session = request.getSession();

- Session được tạo ra giữa một khách hàng HTTP và một máy chủ HTTP bằng servlet container sử dụng HttpSession interface.

- Các method của HttpSession interface:
STTPhươ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()
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
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

B. invalidate() & Session timeout:

- Method invalidate() được sử dụng để tránh các hacker gây ra bất kỳ thiệt hại nào đến ứng dụng. Nó phá hủy các dữ liệu trong một session servlet hoặc JSP có thể yêu cầu trong tương lai. Sessions nên được vô hiệu thận trọng khi chúng được kết hợp với các khách hàng

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

C. Ví dụ:

1.Index



2.Login



3.Navigation


4.LoginServlet


5.Profile Servlet



6.Logout Servlet


III. Kết

- Session tracking cho phép các máy chủ để theo dõi các yêu cầu liên tiếp thực hiện bởi cùng một khách hàng. 

- Một số kỹ thuật Session tracking như URL rewriting, hidden field, and cookie. 

- Java Servlet cung cấp một cơ chế theo dõi session qua javax.servlet.http.HttpSession

- Kỹ thuật URL rewriting cho viết thêm một số dữ liệu thêm vào cuối URL để xác định session.

- Hidden form field được sử dụng để truyền dữ liệu đến các nguồn tài nguyên phía máy chủ vô hình từ người sử dụng. Một cookie là một phần nhỏ của thông tin được gửi bởi một máy chủ cho trình duyệt Web client

- HttpSession interface được sử dụng để tạo ra một session giữa client và server. Các session được tạo ra giữa một khách hàng HTTP và một máy chủ HTTP bằng servlet container sử dụng interface này.

Không có nhận xét nào:

Đăng nhận xét