intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình ứng dụng mạng: Bài 7 - GV. Võ Tấn Dũng

Chia sẻ: Fczxxv Fczxxv | Ngày: | Loại File: PDF | Số trang:60

88
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng Lập trình ứng dụng mạng: Bài 7 Xử lý biến session nhằm trình bày về khái niệm session, HTTP là giao thức phi trạng thái, lưu dữ liệu trong các biến ẩn của form (hidden fields), lưu dữ liệu trong đối tượng session.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình ứng dụng mạng: Bài 7 - GV. Võ Tấn Dũng

  1. TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI 7 XỬ LÝ BIẾN SESSION GV: Võ Tấn Dũng GIẢNG VIÊN: 1 VÕ TẤN DŨNG
  2. PHẦN 1 KHÁI NIỆM SESSION GV: Võ Tấn Dũng 2
  3. HTTP là giao thức phi trạng thái Giao thức HTTP là giao thức phi trạng thái (stateless protocol). Khi một lời yêu cầu (request) được tạo ra từ client thì một kết nối (connection) được mở ra, đáp ứng (response) gửi từ server xuống client. Sau đó, kết nối được đóng lại ngay. Nếu một transaction (giao tác) thực hiện một chuỗi liên tiếp các request/response liên tiếp thì hậu quả là Web Server không nhớ được các bước request/response trước đó. Ví dụ, khi ta mua sắm online, ta chọn các mặt hàng xong thì chuyển sang trang tính tiền. Lúc này Web Server không nhớ trước đó ta đã chọn mặt hàng nào. GV: Võ Tấn Dũng 3
  4. Khái niệm session Ta đã nhận rõ một điều rằng trong dịch vụ Web không có kết nối duy trì thường xuyên giữa trình khách (web browser) và trình chủ (web server). Khi trình duyệt cần trình chủ cung cấp một trang tài liệu, trình duyệt mở kết nối, lấy về trang dữ liệu và sau đó đóng kết nối ngay lập tức. Vì vậy Web Server sẽ không biết được trước đó trình duyệt đã có những trạng thái nào. Session tượng trưng một giai đoạn duy trì kết nối giữa trình khách và trình chủ trong quá trình liên lạc. Một loạt các request từ một client sẽ được liên kết với một session. GV: Võ Tấn Dũng 4
  5. Khái niệm session Như vậy, làm thế nào để server nhớ được các giao tác xảy ra trước đó của một client bất kỳ? Ta có thể theo dõi các phiên làm việc (session tracking) của một web client bằng các cách sau: Lưu dữ liệu trong các biến ẩn của form (hidden fields). Lưu dữ liệu trong đối tượng session. Lưu dữ liệu trong bảng băm (hash table) Lưu dữ liệu toàn cục của ứng dụng web trong đối tượng application. GV: Võ Tấn Dũng 5
  6. PHẦN 2 HIDDEN FORM FIELDS GV: Võ Tấn Dũng 6
  7. HIDDEN FORM FELDS Ý tưởng ở đây là mỗi khi người dùng thực hiện thao tác submit một form, form sẽ chứa một số biến ẩn chứa thông tin trạng thái hoặc liên quan đến người dùng đang tương tác với ứng dụng. Trở ngại lớn nhất của phương pháp này là chương trình luôn phải truyền các biến ẩn liên tục giữa các trang có liên hệ với nhau. Ví dụ: ta hãy xem ví dụ ở slide sau đây. Mục đích của ví dụ này là giữ lại thông tin username để các trang khác truy cập. GV: Võ Tấn Dũng 7
  8. Login.html Login Please log in User Name: GV: Võ Tấn Dũng 8
  9. HIDDEN FORM FELDS GV: Võ Tấn Dũng 9
  10. File Login.jsp Welcome, ! Please enter your favorite book: C/C++ Java Linux XML .NET Platform GV: Võ Tấn Dũng 10
  11. File Login.jsp A GV: Võ Tấn Dũng 11
  12. File BookServlet.java import javax.servlet.*; import java.io.*; public class BookServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out=response.getWriter(); String userName=request.getParameter("username"); String book = request.getParameter("book"); out.println(""); out.println(""); out.println("Well, I see that "+userName+"'s favorite book is "+ book +"."); out.println(""); out.println(""); } GV: Võ Tấn Dũng } 12
  13. File BookServlet.java Ví dụ trên cho ta thấy, thông tin hay giá trị của username được nhập vào từ trang Login.html truyền cho trang Login.jsp. Trang Login.jsp lưu giá trị này trong biến ẩn của form và chuyển tiếp cho Servlet. Quá trình cứ thế tiếp diễn cho đến khi nào bạn thôi không còn muốn sử dụng thông tin của username nữa. GV: Võ Tấn Dũng 13
  14. PHẦN 3 SỬ DỤNG HASH TABLE (dùng để bảo mật các biến ẩn của Form) GV: Võ Tấn Dũng 14
  15. SỬ DỤNG HASH TABLE Một trong những lý do mà biến ẩn của Form không được sử dụng nhiều trong các ứng dụng Web thương mại nhất là các site e-commerce đó là tính không bảo mật của giá trị và tên biến. Với ví dụ BookServlet của các slide trước, người dùng có thể đánh lừa BookServlet bằng cách dùng trình duyệt xem code HTML mà BookServlet gửi xuống và dễ dàng nhận thấy có biến ẩn username. Sau đó người dùng có thể truyền trực tiếp giá trị cho username ngay trên đường dẫn: http://localhost:8080/BookServlet?username=abc&book=Java GV: Võ Tấn Dũng 15
  16. SỬ DỤNG HASH TABLE Để giải quyết tính không bảo mật của các biến ẩn trong Form, ta dùng cơ chế bảng băm (Hash Table). Khi việc chứng thực username/password thành công, bạn sinh ra một khóa ngẫu nhiên tương ứng với username. Khóa này được đặt trong biến ẩn của Form đồng thời lưu giá trị thực tế của biến username và khóa trong đối tượng bảng băm trên server. Lần kế tiếp người dùng chuyển biến ẩn lên server, trang JSP hay Servlet của ta không chuyển giá trị của username mà chuyển giá trị của khóa tương ứng với nó. Có giá trị khóa, thực hiện dò trong bảng băm ta sẽ tìm ra được giá trị của biến username. GV: Võ Tấn Dũng 16
  17. File UserDatatable.java Đối tượng bảng băm dùng sinh khóa và lưu dữ liệu cho biến được cài đặt thành lớp UserDataTable như sau: /* UserDataTable.java */ package storage; import java.util.*; public class UserDataTable { protected static Hashtable userData=new Hashtable(); protected static Random keyGenerator = new Random(); public static String createUserData() { String userKey=""+keyGenerator.nextLong(); userData.put(userKey, new Hashtable()); return userKey; } public static Hashtable getUserData(String userKey) { if(userKey==null) return null; return (Hashtable)userData.get(userKey); } public static void clearUserData(String userKey) { if(userKey==null) return; userData.remove(userKey); GV: Võ Tấn Dũng } 17 }
  18. File Login2.jsp Trang Login2.jsp sau đây thay vì lưu nội dung username vào biến ẩn của Form, chúng ta gọi UserDataTable sinh khóa và lưu khóa vào biến Form ẩn. Welcome, ! Please enter your favorite Book: C/C++ Java Linux XML .NET Platform GV: Võ Tấn Dũng 18
  19. File BookServlet2.java Dưới đây là mã nguồn của BookServlet2.jsp thay thế cho BookServlet. BookServlet nhận giá trị khóa, tìm dữ liệu tương ứng của khóa trong bảng băm và in ra kết xuất. /* BookServlet2.java */ package storage; import javax.servlet.*; import java.io.*; import java.util.*; public class NewServlet /*BookServlet2*/ extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String userKey=request.getParameter("userkey"); String book=request.getParameter("book"); GV: Võ Tấn Dũng 19 Hashtable userData=storage.UserDataTable.getUserData(userKey);
  20. File BookServlet2.java if(userData==null) { out.println(""); out.println("Sorry"); out.println("The system is experiencing problems."); out.println(""); return; } String userName=(String)userData.get("username"); out.println(""); out.println(""); out.println("Well, I see that "+userName+"'s favorite book is "+book+"."); out.println(""); out.println(""); } GV: Võ Tấn Dũng } 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2