Tạo chức năng Remember me bằng form login trên CodeIgniter

Trong hầu hết các form login của mọi hệ thống thì thường có chức năng Remember Me, giúp người dùng khi quay lại hệ thống thì không cần đăng nhập lại. Trong bài lần này mình xin trình bày cách tạo chức năng Remember Me bằng form login trên CodeIgniter.

Các công cụ cần thiết.

Để làm tốt được bài này, các bạn nên xem trước bài Hướng dẫn tạo form login trên CodeIgniter.

Chúng ta sẽ đi xây dựng chức năng Remember Me bằng form login trên CodeIgniter theo từng bước ở dưới đây.

1. Tạo mô-đun authentication.

Chúng ta tạo một mô-đun tên là authenticaion trong thư mục modules với cấu trúc như sau.

Tạo chức năng Remember me bằng form login trên CodeIgniter

Trong thư mục controllers chúng ta sẽ tạo một file tên là authentication.php, và copy đoạn code bên dưới vào.

<?php
class Authentication extends CI_Controller{
	
	private $b_Check = true;
	
	public function __construct(){
		parent::__construct();
		#Tải thư viện  và helper của Form trên CodeIgniter
		$this->load->helper(array('form', 'url', 'cookie'));
		$this->load->library(array('form_validation','session'));
		
		#Tải model
		$this->load->model(array('authentication_model'));
	}
	
	public function index(){
		// Check if the cookie exists
		if(isset($this->session->userdata['user']['id'])){
			redirect(base_url('authentication/success'));
		}else {
			#check autologin
			$cookie_name	=	'siteAuth';
			// Check if the cookie exists
			if(isset($_COOKIE[$cookie_name])){
				$a_User = parse_str($_COOKIE[$cookie_name]);
				// Register the session
				$user_info	=	array(
										'username'	=> $a_User['username'],
										'password'	=> $a_User['password']
									 );
				$this->session->set_userdata('user', $user_info);
				redirect(base_url('authentication/success'));
			}
		}
		
		$this->load->view('authentication-template');
	}
	
	public function login(){
		$this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
		$this->form_validation->set_rules('password', 'Password', 'required');
		#Kiểm tra điều kiện validate
		if($this->form_validation->run() == TRUE){
			$a_UserInfo['username'] = $this->input->post('username');
			$a_UserInfo['password'] = md5($this->input->post('password'));
			$autologin =	($this->input->post('remember_me') == 'on') ? 1 : 0;
			$a_UserChecking = $this->authentication_model->a_fCheckUser( $a_UserInfo );
			if($a_UserChecking){
				if($autologin == 1){
					$cookie_name	=	'siteAuth';
					$cookie_time	=	3600*24*30; // 30 days.
					setcookie('ci-session', 'user='."", time() - 3600);	// Unset cookie of user
					setcookie($cookie_name, 'user='.$a_UserInfo['username'].'&password='.$a_UserInfo['password'], time() + $cookie_time);
				}
				$this->session->set_userdata('user', $a_UserChecking);
				redirect(base_url('authentication/success'));
			}
			$this->b_Check = false;
		}
		$a_Data['b_Check']= $this->b_Check;
		$this->load->view('authentication-template', $a_Data);
		
	}

	public function logout(){
		$this->session->sess_destroy();	// Unset session of user
		$cookiename	=	"siteAuth";
		setcookie($cookiename, 'user='."", time() - 3600);	// Unset cookie of user
		redirect(base_url('authentication'));
	}
	
	public function success(){
		$a_UserInfo['user'] = $this->session->userdata('user');
		$this->load->view('success-template', $a_UserInfo);
	}

}

Trong thư mục views chúng ta tạo hai files tên là authentication-template.php, với nội dung là

<!DOCTYPE html>
<html lang="en">
<head>
	<style type="text/css">
		#body{margin:10px auto; width: 800px; font-size: 90%; }
		form {width: 600px; margin: 40 auto;}
		form div{padding: 0 0 5px 0;}
		label {width: 120px; display: block; float: left; clear: left; font-weight: bold;}
		span.error p{width: auto; padding: 0 0 0 120px; font-style: italic; color: red; font-size: 90%;}
		span.success {color: green;}
		.form{ width: 150px;}
	</style>
	<meta charset="utf-8">
	<title>Title | Tạo chức năng Remember Me bằng login trên CodeIgniter</title>
</head>
<body>
	<div id="body">
		<h2>Hướng dẫn tạo form login trên CodeIgniter</h2>
		<form action="<?php echo base_url()."authentication/login/" ?>" method="post" id="form">
			<fieldset>
				<legend>Tạo chức năng Remember Me bằng login trên CodeIgniter</legend>
				<div><span class="success"><?php if(isset($b_Check) && $b_Check == false){echo "Tài khoản không đúng. Xin vui lòng đăng nhập lại !";}?></span></div>
				<div>
					<label for="username">Username</label>
					<input class="form" type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
					<span class="error"><?php echo form_error('username'); ?></span>
				</div>
				<div>
					<label for="password">Password</label>
					<input class="form" name="password" type="password" value="<?php echo set_value('password'); ?>" size="50" />
					<span class="error"><?php echo form_error('password'); ?></span>
				</div>
				<div>
					<label for="remember_me">Remember me</label>
					<input  name="remember_me" type="checkbox" />
				</div>
				<div><input type="submit" id="save" value="Log in" /></div>
			</fieldset>
		</form>
	</div>
</body>
</html>

Và file thứ hai là success-template.php, với nội dung là.

<!DOCTYPE html>
<html lang="en">
<head>
	<style type="text/css">
		span{color: blue; font-style: italic;}
	</style>
	<meta charset="utf-8">
	<title>Title | Tạo chức năng Remember Me bằng login trên CodeIgniter</title>
</head>
<body>
	<div id="body">
		<h2>Tạo chức năng Remember Me bằng login trên CodeIgniter | Thành Công</h2>
		<h3>Xin chào <span><?php echo $user['username'];?></span></h3>
		<p>
			<a href="<?php echo base_url();?>authentication/logout">Logout</a>
		</p>
	</div>
</body>
</html>

2. Điều hướng lại đường dẫn.

Ta mở file routes.php trong thư mục config bằng notepad++, và copy đoạn mã sau đây vào.

// authentication
$route['authentication'] 			= "authentication/index";
$route['authentication/login'] 		= "authentication/login";
$route['authentication/logout'] 		= "authentication/logout";
$route['authentication/success'] 		= "authentication/success";

3. Chạy chương trình trên trình duyệt.

Để kiểm tra kết quả của chương trình form login trên CodeIgniter như thế nào, chúng ta mở firefox ra và chạy chương trình.

Chúng ta sẽ đăng nhập với username/password là jason/123456, và tick vào nút Remember Me. Sau đó sẽ tắt trình duyệt đi

Tạo chức năng Remember me bằng form login trên CodeIgniter

Sau khi bật lại trình duyệt ta sẽ thấy hệ thống tự động login vào.

Tạo chức năng Remember me bằng form login trên CodeIgniter

Các bạn có thể tự mình thực hành bằng cách download file đính kèm ở bên dưới.

tao-chuc-nang-remember-me-bang-form-login-tren-codeigniter.zip

Chúc các bạn thành công :)

Tags: