Tự động đăng xuất khi hết hạn Session

Khi bạn làm ra một ứng dụng bất kỳ, bạn luôn tìm cách để ứng dụng đó an toàn hơn. Vì vậy, trong trường hợp này, bạn nên tìm cách để hệ thống tự động đăng xuất (logout) khi phiên làm việc (session) hết hiệu lực (expire)

Tự động đăng xuất có nghĩa là khi người dùng không hoạt động trong một khoảng thời gian nào đó. Sau thời gian đó, hệ thống sẽ tự động thoát ra khỏi hệ thống.

Trong phạm vi bài viết này, tôi sẽ hướng dẫn các bạn, làm thế nào thêm tính năng tự động đăng xuất bằng javascript trong Codeigniter 3.

Giờ chúng ta bắt đầu thôi

Cài đặt Codeigniter 3

Trong các bài viết trước, tôi đã có hàng loạt bài viết hướng dẫn cách tạo một ứng dụng Web với Codeigniter 3. Bạn có thể tham khảo tại đây.

Cài đặt Route – URL đăng xuất

Vì bạn đang phát triển một hệ thống tự động đăng xuất sau một khoảng thời gian cụ thể. Vậy nên bạn cần tạo URL đăng xuất. URL này sẽ được tự động kích hoạt và tự động đăng xuất.

Mở tệp routes.php từ thư mục /application/config. Thêm mã code này vào đó.

$route['default_controller'] = 'page';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['logout'] = 'page/logout_controller';

Kích hoạt hàm base_url trong Codeigniter 3

Trong trong phần javascript, chúng ta có sử dụng một hàm tên là base_url(). Để kích hoạt và sử dụng hàm này trong Codeigniter 3. Bạn cần làm như sau :

Mở tệp autoload.php từ thư mục /application/config. Thêm mã code này vào đó.

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url', 'file');

Cài đặt Controller

Bạn hãy mở bất kỳ một file Controller nào trong thư mục application/controllers. Ở đây tôi sẽ mở một file Controller có tên là User.php

<?php 
namespace App\Controllers;

class User extends BaseController
{
    public function index()
    {
      // other site code stuff
    }
  
	public function doLogout()
	{
		$session =  session();
        $session->destroy(); // destroy session variables and values
        return redirect()->to(base_url("/"));
	}
}

Ở đây, bên trong User controller này, chúng ta có hai phương thức là index() và doLogout().

  • Hàm index() chứa mã nguồn chung cho trang web
  • Hàm doLogout() dùng để hủy tất cả các biến và giá trị phiên làm việc của một người dùng cụ thể.

Thêm các phương thức Javascript

Tiếp theo, bạn hãy thêm các hàm Javascript sẽ được kích hoạt bởi sự kiện của Javascript.

//...

<head>
  <script type="text/javascript">
    // Set timeout variables.
    var timoutNow = 1800000; // Timeout of 30 mins - time in ms
    var logoutUrl = "<?php echo base_url('logout') ?>"; // URL to logout page.

    var timeoutTimer;

    // Start timer
    function StartTimers() {
      timeoutTimer = setTimeout("IdleTimeout()", timoutNow);
    }

    // Reset timer
    function ResetTimers() {
      clearTimeout(timeoutTimer);
      StartTimers();
    }

    // Logout user
    function IdleTimeout() {
      window.location = logoutUrl;
    }
 </script>
</head>

<body onload="StartTimers();" onmousemove="ResetTimers();">
  
   //...
   
</body> 
   
   //...

Đoạn mã trên là đoạn mã hoàn chỉnh của Javascript phát hiện hoạt động của các đầu vào trên màn hình.

  • onload=”StartTimers();” onmousemove=”ResetTimers();” Thiết lập thời gian TimeOut nếu dữ liệu đầu vào trên màn hình không hoạt động. Đồng thời, nếu dữ liệu đầu vào hoạt động thì sẽ thiết lập lại thời gian TimeOut.
  • var timoutNow = 1800000; Thời gian tính bằng milliseconds tương đương với 30 phút.
  • var logoutUrl = “” biến này chứa url, khi bạn nhấn vào nó sẽ chạy phương thức đăng xuất và hủy tất cả các giá trị phiên.

Khi bạn không thực hiện bất kỳ hoạt động nào trong vòng 30 phút. Với những gì bạn đã chỉ định ở trên, hệ thống sẽ gọi URL đăng xuất và thực hiện đăng xuất. Nếu giả sử bạn thực hiện bất kỳ hoạt động nào trong thời gian này, sự kiện onmousemove sẽ đặt lại bộ đếm thời gian một lần nữa.

Tôi hy vọng bài viết này đã giúp bạn đăng xuất tự động bằng Javascript Auto một cách rất chi tiết.