Như vậy, Website sử dụng session để chắc chắn rằng nó sẽ nhận ra bạn khi bạn chuyển trang trong cùng một website hoặc khi bạn refesh trang.
Các phương thức để quản lý session:
URL Rewriting: các client có thể gửi thông tin đến server bằng cách thêm ID của session vào địa chỉ URL cùng với các requests. Việc này khá gây mệt mỏi vì tự chúng ta phải theo dõi các tham số này trong mỗi response từ server và phải đảm bảo rằng các ID của các session k trùng nhau
Hidden Form Variables: Chúng ta có thể tạo các trường ẩn trong HTML và khi người dùng bắt đầu chuyển hướng, chúng ta có thể gán 1 giá trị duy nhất cho người dùng đó, đồng thời theo dõi được các session. Độ bảo mật khi dùng phương pháp này là không cao bới vì chúng ta rất dễ dàng lấy được giá trị từ những trường ẩn này từ HTML
Ngoài ra, còn có những phương thức khác như Persistent Cookies, Persistent Mechanism hay Servlet APIs.., Trong đó, Servlet APIs được xây dựng dựa trên các phương thức trên
Cách sử dụng Session
Chúng ta sẽ tạo một ứng dụng web nhằm lưu username của người dùng vào session rồi sau đó hiển thị ở trang sau:
Đầu tiên, tạo 1 trang HTML như sau:
Sau khi người dùng nhập username và nhấn Login, Servlet Login sẽ kiểm tra xem username có trong database không
Tiếp theo, chúng ta tạo Servlet Login như sau:
public class Login extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Login</title>");
out.println("</head>");
out.println("<body>");
String username = request.getParameter("username");
if (userList.contains(username)) {
HttpSession session = request.getSession();
session.setAttribute("username", username);
RequestDispatcher rd = request.getRequestDispatcher("Logined");
rd.forward(request, response);
}
out.println("<h1>UserName Mismatch " +"</h1>");
out.println("</body>");
out.println("</html>");
}
}
protected List<String> userList = null;
@Override
public void init() throws ServletException {
userList = new LinkedList<>();
userList.add("Long");
userList.add("Hoang");
userList.add("Tuan");
}
}
Ở trên, chúng ta có 1 mock data là userList được khởi tạo và thêm phần tử ở hàm init().
Ở hàm processRequest(), username được lưu vào 1 session có tên là "username" thông qua session.setAttribute("SessionName", SessionValue) rồi sau đó chuyển hướng trang sang Logined Servlet
Tại Servlet Logined, giá trị của session có tên là "username" được lấy ra thông qua session.getAttribute("SessionName") và hiển thị trong hàm processRequest:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Logined</title>");
out.println("</head>");
out.println("<body>");
HttpSession session = request.getSession();
String username = (String) session.getAttribute("username");
out.println("<h1>Hello, " + username + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
Không có nhận xét nào:
Đăng nhận xét