Sử dụng lớp Session trên CodeIgniter

Lớp Session là được CodeIgniter hỗ trợ nhằm thực hiện việc duy trì trạng thái và hoạt động của user khi đang ở tại trang web. Lớp Session trên CodeIgniter rất dễ sử dụng và tùy chỉnh. Trong bài này mình sẽ trình bày về Session trên CodeIgniter.

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

Notepad++ phiên bản mới nhất http://filehippo.com/download_notepad

Chúng ta sẽ tìm hiểu lớp Session trên CodeIgniter theo từng bước như dưới đây.

1. Thiết lập encryption key trong file config.

CodeIgniter đề xuất rằng, ngay cả khi các bạn không sử dụng Session Class thì cũng nên thiết lập encryption key này với mục đích duy nhất là tránh được sự giả mạo Session.

Để thiết lập encryption key, các bạn mở file config.php trong thư mục config.

Sử dụng lớp Session trên CodeIgniter

2. Tải lớp Session trên CodeIgniter vào hệ thống.

Chúng ta thường sử dụng Session cho việc xác nhận thông tin người dùng, nên để dùng Session riêng cho Controller xử lý việc đăng nhập, đăng xuất.

Để tải Session ta dùng $this->load->library('session'), đặt trong hàm __construct().

Chúng ta có thể tải tự động lớp Session này bằng cách thiết lập nó ở trong file autoload.php.

Sử dụng lớp Session trên CodeIgniter

3. Các thành phần dữ liệu của lớp Session.

Các thông tin chính mà Session lưu lại trên trình duyệt bao gồm :

- Session ID : Là một khóa để xác định phiên của một người dùng, khóa này là duy nhất, nó được mã hóa bằng mã MD5 và được tự động thiết lập lại sau 5 phút.

- IP Address : Địa chỉ IP của máy người dùng. 

- User's Agent Data : Thông tin về trình duyệt của người dùng.

- Last activity : Thời điểm vào hệ thống gần đây nhất của người dùng.

Để xem thông tin này chúng ta dùng hàm $this->session->userdata('tham_số');

$session_id = $this->session->userdata('session_id');
$ip_address = $this->session->userdata('ip_address');
$user_agent = $this->session->userdata('user_agent');
$last_activity = $this->session->userdata('last_activity');

echo "Session Id : ".$session_id."<br />";
echo "Địa chỉ IP : ".$ip_address."<br />";
echo "Trình duyệt : ".$user_agent."<br />";
echo "Thời gian truy cập gần nhất : ".$last_activity."<br />";

Sử dụng lớp Session trên CodeIgniter

4. Lưu các thông tin vào một session.

Khi một user đăng nhập vào hệ thống, thì ta thường lưu các thông tin của người dùng này trong suốt quá trình người sử dụng hệ thống.

Để làm được điều này chúng ta sử dụng hàm $this->session->set_userdata('tên_session', 'giá_trị_cần_lưu')

		$userdata = array(
				'username'  => 'johndoe',
				'email'     => 'johndoe@some-site.com',
				'logged_in' => TRUE
		);
		$this->session->set_userdata('userInfo', $userdata);

Sử dụng lớp Session trên CodeIgniter

Để lấy được các thông tin đã lưu ở trên ta dùng hàm $this->session->userdata('tên_session')

Sử dụng lớp Session trên CodeIgniter

Và kết quả thu được là 

Sử dụng lớp Session trên CodeIgniter

5. Hủy các thông tin session.

Trong hệ thống đôi khi chúng ta cần hủy một vài session sau khi đã sử dụng chúng xong rồi.

Để thực hiện việc này chúng ta sử dụng hàm $this->session->unset_userdata('tên_session')

	$this->session->unset_userdata('userInfo');

Nếu muốn hủy tất cả các session hiện tại, thì chúng ta dùng hàm $this->session->sess_destroy()

6. Lưu thông tin Session vào Database.

Như ta đã biết thì các thông tin của Session được lưu trong cookie trên trình duyệt người dùng. Đối với hệ thống yêu cầu cần có bảo mật cao thì việc xác nhận session là cần thiết.

CodeIgniter cho phép chúng ta sử dụng chức năng lưu session vào database một cách rất đơn giản.

Để thực hiện việc này ta làm như sau.

- Thiết lập tham số của session trong file config.php: $config['sess_use_database'] = TRUE$config['sess_table_name'] = 'ci_sessions'

- Tạo một bảng trong database tên là ci_sessions

	CREATE TABLE IF NOT EXISTS  `ci_sessions` (
		session_id varchar(40) DEFAULT '0' NOT NULL,
		ip_address varchar(45) DEFAULT '0' NOT NULL,
		user_agent varchar(120) NOT NULL,
		last_activity int(10) unsigned DEFAULT 0 NOT NULL,
		user_data text NOT NULL,
		PRIMARY KEY (session_id),
		KEY `last_activity_idx` (`last_activity`)
	);

Sử dụng lớp Session trên CodeIgniter

Khi hệ thống hoạt động thì session của User sẽ tự động được lưu vào trong bảng ci_session này. Ta có thể tùy ý lấy ra và validate theo yêu cầu cụ thể.

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

Tags: