CodeIgnitor: Thư viện Session - Dữ liệu Session
Dữ liệu Session (Session Data) là gì?
Dữ liệu session đơn giản là một mảng kết hợp với một session ID cụ thể (cookie).
Nếu bạn đã quen với việc sử dụng các session trong PHP rồi thì bạn nên làm quen với $_SESSION superglobal của PHP.
CodeIgniter cho phép truy cập dữ liệu session của nó và sử dụng các thao tác (như đọc, thiết lập và hủy) trên mảng $_SESSION.
Mặt khác, CodeIgniter cũng cung cấp hai loại dữ liệu session đặc biệt sẽ được trình bày chi tiết bên dưới: flashdata và tempdata.
Lưu ý:
Trong những phiên bản CI trước đây thì dữ liệu session phổ biến được sử dụng là 'userdata'. Trong phiên bản này và về sau chủ yếu nó được viết để giải thích cách tùy chỉnh 'userdata' để các phương thức hoạt động.
Truy xuất dữ liệu Session
Bất kỳ thông tin nào của mảng session đều có sẵn trong $_SESSION superglobal:
$_SESSION['item']
Hoặc thông qua các getter magic:
$this->session->item
Và để tương thích ngược thì ta sử dụng phương thức userdata():
$this->session->userdata('item');
Trong đó item là chỉ số (key) của mảng mà bạn muốn lấy. Ví dụ như để gán key 'name' cho biến $name thì ta làm như sau:
$name = $_SESSION['name']; // hoặc: $name = $this->session->name // hoặc: $name = $this->session->userdata('name');
Lưu ý:
Phương thức userdata() trả về NULL nếu key bạn muốn truy cập không có sẵn.
Nếu bạn muốn truy xuất tất cả các userdata thì đơn giản là bạn chỉ cần làm như sau:
$_SESSION // hoặc: $this->session->userdata();
Thêm dữ liệu Session
Giả sử có một người dùng đăng nhập vào site của bạn. Sau khi xác thực, bạn có thể thêm tên đăng nhập và địa chỉ email vào session, và sau đó bạn có quyền sử dụng những dữ liệu đó trong session mà không cần phải thao tác gì với database cả.
Công việc của bạn lúc này là chỉ việc gán dữ liệu vào mảng $_SESSION giống như các biến thông thường, hoặc bạn có thể thực hiện: $this->session.
Ngoài ra, bạn có thể dùng cách thức cũ để gán dữ liệu ở dạng "userdata" bằng cách truyền một mảng chứa dữ liệu tương ứng tới phương thức set_userdata():
$this->session->set_userdata($array);
Trong đó, $array là một mảng kết hợp có chứa dữ liệu của bạn. Ví dụ:
$newdata = array( 'username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE ); $this->session->set_userdata($newdata);
Nếu bạn muốn thêm vào userdata từng giá trị một thì bạn có thể làm như sau:
$this->session->set_userdata('some_name', 'some_value');
Nếu bạn muốn kiểm tra xem một biến session nào đó có tồn tại hay không thì bạn đơn giản là dùng phương thức isset():
// trả về FALSE nếu biến 'some_name' không có hoặc chứa NULL, // trả về TRUE nếu ngược lại: isset($_SESSION['some_name'])
Hoặc bạn cũng có thể gọi phương thức has_userdata():
$this->session->has_userdata('some_name');
Xóa dữ liệu Session
Để xóa một dữ liệu session nào đó trong $_SESSION thì bạn có thể sử dụng phương thức unset():
unset($_SESSION['some_name']); // hoặc xóa nhiều: unset( $_SESSION['some_name'], $_SESSION['another_name'] );
Ngoài ra, ta có thể sử dụng phương thức unset_userdata() để xóa dữ liệu session. Ví dụ như nếu bạn muốn xóa 'some_name' khỏi dữ liệu session bạn làm như sau:
$this->session->unset_userdata('some_name');
Hoặc nếu bạn muốn xóa cùng lúc nhiều dữ liệu session thì bạn làm như sau:
$array_items = array('username', 'email');
$this->session->unset_userdata($array_items);
Lưu ý:
Trong những phiên bản trước thì phương thức unset_userdata() dùng được cho mảng nhưng theo dạng cặp key => 'dummy value'. Ở phiên hiện này thì điều đó không còn được hỗ trợ nữa.