TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM
LẬP TRÌNH ỨNG DỤNG MẠNG
BÀI 7
GIẢNG VIÊN:
1
VÕ TẤN DŨNG
GV: Võ Tấn Dũng
XỬ LÝ BIẾN SESSION
PHẦN 1
2
GV: Võ Tấn Dũng
KHÁI NIỆM SESSION
HTTP là giao thức phi trạng thái
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.
y Nếu một transaction (giao tác) thực hiện một chuỗi liên
Khái niệm session
y 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:
y Lưu dữ liệu trong các biến ẩn của form (hidden fields).
y Lưu dữ liệu trong đối tượng session.
y Lưu dữ liệu trong bảng băm (hash table)
y Lưu dữ liệu toàn cục của ứng dụng web trong đối tượng
5
GV: Võ Tấn Dũng
application.
PHẦN 2
6
GV: Võ Tấn Dũng
HIDDEN FORM FIELDS
HIDDEN FORM FELDS
</Table>
<BR> <INPUT type="SUBMIT" value="Login!">
</BODY>
</HTML>
8
GV: Võ Tấn Dũng
</FORM>
9
GV: Võ Tấn Dũng
HIDDEN FORM FELDS
File Login.jsp
<HTML> <BODY bgcolor="#FF0000">
Welcome, <%=userName%>!
<FORM ACTION="BookServlet" METHOD="POST">
<%--Luu username vao bien form an --%>
<P>Please enter your favorite book:
<SELECT name ="book">
response.setContentType("text/html");
PrintWriter out=response.getWriter();
String userName=request.getParameter("username");
String book = request.getParameter("book");
out.println("<HTML>");
out.println("<BODY bgcolor=\"#00FF00\">");
out.println("Well, I see that "+userName+"'s favorite book is "+ book +".");
out.println("</BODY>");
out.println("</HTML>");
}
12
GV: Võ Tấn Dũng
}
y
13
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
File BookServlet.java
y http://localhost:8080/BookServlet?username=abc&book=Java
SỬ DỤNG HASH TABLE
Form, ta dùng cơ chế bảng băm (Hash Table).
y 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.
y 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.
16
GV: Võ Tấn Dũng
y Để giải quyết tính không bảo mật của các biến ẩn trong
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:
y
/* UserDataTable.java */ package storage; import java.util.*;
public class UserDataTable {
protected static Hashtable userData=new Hashtable();
<HTML> <BODY bgcolor="#FFFFFF">
Welcome, <%=userName%>!
<FORM action="BookServlet2" method="POST">
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 book=request.getParameter("book");
19
Hashtable userData=storage.UserDataTable.getUserData(userKey);
GV: Võ Tấn Dũng
String userKey=request.getParameter("userkey");
File BookServlet2.java
if(userData==null)
{
out.println("<HTML><BODY>");
out.println("<H1>Sorry</H1>");
out.println("The system is experiencing problems.");
out.println("</BODY></HTML>");
return;
}