Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

[series Spring Boot] 9. Http Session

Discussion in 'Spring Framework' started by quydtkt, 23/11/19.

  1. quydtkt

    quydtkt Administrator

    Trong bài này, chúng ta sẽ cùng tìm hiểu về session trong Spring Boot.
    1. Session là gì
    - Request và session là 2 nơi lưu dữ liệu tạm thời trong một ứng dụng web
    - Tuy nhiên, khác với request, dữ liệu chỉ tồn tại trong thời giam ngắn, từ lúc client gửi yêu cầu lên web server đến khi nhận được hồi đáp từ web server. Dữ liệu được lưu trữ trong session sẽ tồn tại từ khi nó được khởi tạo đến khi bị timeout hoặc bị hủy một cách chủ động.
    - Dữ liệu không tự động được đưa vào session như request mà phải được chủ động đưa vào, cũng như loại bỏ, nếu thời gian timeout là vô hạn.
    - Có thể quy định cho dữ liệu trong session một khoảng thời gian timeout. Nếu trong thời gian này mà web server không nhận được bất cứ request nào từ client thì session của client sẽ bị xóa.​
    2. Cách sử dụng session
    - Kiểm tra login là trường hợp tiêu biểu cho việc sử dụng session. Trường hợp user mới truy cập trang web lần đầu thì sẽ yêu cầu user phải login. Khi login thành công thì sẽ tạo một biến trong session để lưu thông tin login. Trường hợp user chưa logout hoặc chưa bị session timeout thì sẽ tiếp tục sử dụng mà không cần phải login lại. Ngược lại sẽ yêu cầu user login để tiếp tục sử dụng.​
    LoginController.java
    PHP:
    package vn.congdongjava.controller;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
     
    import javax.servlet.http.HttpSession;
     
    @
    Controller
    public class LoginController {
     
        @
    RequestMapping(value "/"method RequestMethod.GET)
        public 
    String show(HttpSession session) {
            if (
    session.getAttribute("username") != null) {
                return 
    "login_info";
            }
     
            return 
    "login";
        }
     
        @
    RequestMapping(value "login"method RequestMethod.POST)
        public 
    String submit(String usernameHttpSession session) {
            
    session.setAttribute("username"username);
     
            return 
    "login_info";
        }
     
        @
    RequestMapping(value "logout"method RequestMethod.GET)
        public 
    String logout(HttpSession session) {
            
    session.removeAttribute("username");
            return 
    "login";
        }
    }
    - Tại LoginController có 3 request mapper​
    • show: Hiển thị trang thông tin người dùng nếu người dùng đã login. Ngược lại hiển thị trang login. Việc kiểm tra login được thực hiện bằng cách kiểm tra xem trong session có tồn tại attribute username hay không. Có thể dùng method getAttribute để lấy ra session attribute từ session.
    • submit: Xử lý login. Sau khi xử lý, put thông tin login vào session. Có thể put thông tin vào session bằng cách sử dụng method setAttribute.
    • logout: Xóa thông tin login trong session. Method removeAttribute có công dụng xóa 1 session attribute
    - Để sử dụng seesion, ta khai báo biến HttpSession là tham số đầu vào của request mapper. Spring Boot sẽ tự khởi tạo biến cho chúng ta sử dụng mà không cần phải tự khởi tạo.​
    login.html
    HTML:
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Login</title>
    </head>
    <body>
    <form action="/login" method="post">
    	Username: <input type="text" name="username"><br>
    	<button type="submit">Login</button>
    </form>
    </body>
    </html>
    login_info.html
    HTML:
    <!DOCTYPE HTML>
    <html lang="en">
    <head>
    	<meta charset="UTF-8">
    	<title>Title</title>
    </head>
    <body>
    Username: [[${session.username}]]<br>
    <a href="/logout">Logout</a>
    </body>
    </html>
    - Có thể dùng cú pháp [[${session.key }]] để truy cập session attribute trong thymeleaf​
    Chạy project và truy cập vào link http://localhost:8080
    [​IMG]
    Nhập username -> click Login
    [​IMG]
    Thử truy cập lại link http://localhost:8080, trang thông tin login vẫn được hiển thị do trong session đã tồn tại attribute username
    [​IMG]
    Click link logout, trang login sẽ được hiển thị do session attribute username đã bị xóa
    [​IMG]
    Cám ơn các bạn đã theo dõi. Hẹn gặp lại trong bài viết tiếp theo :)
     

    Attached Files:

    Last edited: 23/11/19

Chia sẻ trang này

Loading...