CodeIgnitor: Thư viện Session - Khởi tạo và hoạt động


Khóa học qua video:
Python C# Lập trình C Java SQL Server PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Thư viện Session của CodeIgniter giúp quản lý trạng thái của người dùng khi họ truy cập website. Các thông tin này được lưu trữ (và mã hóa) trong một tập tin cookie. Hoặc ta cũng có thể thiết lập lưu trữ session trong cơ sở dữ liệu để nâng cao tính bảo mật. Lưu ý là khái niệm session ở đây không liên quan đến session của PHP. CodeIgniter tạo ra dữ liệu session của riêng nó, nhằm cung cấp một cách thức quản lý linh động hơn.

Khởi tạo một session

Để sử dụng thư viện Session, ta khai báo như sau:

$this->load->library('session');

Sau khi khai báo, ta có thể sử dụng các phương thức của thư viện Session bằng cách gọi:

$this->session->some_function();

 

Quan trọng

Do lớp Loader được khởi tạo bởi bộ điểu khiển cơ sở của CodeIgniter, vậy nên hãy đảm bảo rằng bạn đã gọi parent::__construct() trước khi cố gắng load một thư viện từ bên trong một hàm tạo controller.

Cách thức hoạt động

Khi một trang được tải về, lớp Session sẽ kiểm tra xem có dữ liệu session hợp lệ trong cookie của người dùng hay không. Nếu session không tồn tại hoặc đã hết hạn, một session mới sẽ được tạo ra và lưu vào cookie của người dùng.

Nếu session tồn tại, thông tin bên trong session sẽ được cập nhật và một session_id sẽ được tạo ra.

Điều quan trọng bạn cần phải hiểu đó là một khi đã được khởi tạo thì lớp Session sẽ chạy tự động và bạn không cần phải làm gì. Bạn cũng có thể xem phần bên dưới về dữ liệu session, nhưng những hoạt động như đọc, ghi và update một session là tự động.

Lưu ý:

Theo CLI, lớp Session sẽ tự động dừng chính nó, vì đây là ý tưởng hoàn toàn dựa trên giao thức HTTP.

Lưu ý về truy cập đồng thời (concurrency)

Trừ khi bạn đang phát triển một website thiên về sử dụng nhiều tính năng AJAX, bạn có thể bỏ qua phần lưu ý này. Tuy nhiên, nếu bạn đang gặp khó khăn về hiệu năng của website thì đây là lưu ý bạn nên xem xét.

Các Session trong các phiên bản trước đây của CodeIgniter đã không thực thi việc khóa (locking), có nghĩa là hai yêu cầu (request) HTTP sử dụng cùng một session lại có thể cùng chạy được trong cùng một thời điểm. Để thực hiện kỹ thuật này một cách phù hợp hơn thì các yêu cầu phải ở trạng thái không khóa (non-blocking).

Tuy nhiên, các yêu cầu mà ở trạng thái non-blocking thì lại không an toàn trong trường hợp là các session, nguyên do là vì những thay đổi đối với dữ liệu session (hoặc tạo session ID) trong một yêu cầu có thể gây cản trở đối với việc thực thi của yêu khác đang mong muốn truy cập đồng thời. Chi tiết này là nguồn gốc của nhiều vấn đề và là lý do chính để CodeIgniter 3.0 viết lại thư viện Session một cách hoàn chỉnh.

Vì sao ta lại nói về điều này? Bởi vì có thể sau khi cố gắng tìm được nguyên nhân về hiệu năng của website của bạn thì bạn có thể kết luận rằng khóa (locking) là một nguyên nhân và bạn sẽ có thể tìm cách để loại bỏ các khóa đi.

BẠN ĐỪNG LÀM ĐIỀU ĐÓ! Việc loại bỏ các khóa lại là hành động sai và nó sẽ gây ra nhiều vấn đề hơn!

Thực ra khóa không phải là vấn đề, nó là một giải pháp. Vấn đề ở đây là bạn vẫn mở session trong khi bạn đã xử lý xong nó, thế thì nó không còn cần đến nữa. Do đó, điều mà bạn cần làm là đóng session đối với yêu cầu hiện thời lại sau khi nó không còn cần đến nữa.

Đóng session bằng cách nào? bạn gọi đến hàm session_write_close() mỗi khi bạn không còn cần một biến session nào nữa.

» Tiếp: Thư viện Session - Dữ liệu Session
« Trước: Thư viện Encryption
Khóa học qua video:
Python C# Lập trình C Java SQL Server PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!