Làm việc với Session trong Laravel
Session là một cơ chế cho phép ứng dụng web có thể lưu trữ dữ liệu người dùng (hay rộng hơn là client) và sử dụng dữ liệu này ở nhiều lượt truy cập khác nhau diễn ra sau đó. Sử dụng Session API cung cấp bởi Laravel, các lập trình viên chúng ta có thể làm việc với session một cách thuận tiện. Với ...
Session là một cơ chế cho phép ứng dụng web có thể lưu trữ dữ liệu người dùng (hay rộng hơn là client) và sử dụng dữ liệu này ở nhiều lượt truy cập khác nhau diễn ra sau đó. Sử dụng Session API cung cấp bởi Laravel, các lập trình viên chúng ta có thể làm việc với session một cách thuận tiện.
Với Session API trong Laravel chúng có thể linh hoạt cấu hình cách thức lưu trữ session trên server sử dụng tập tin app/config/session.php. Trong bài viết này chúng ta sẽ tìm hiểu 2 cách thức lưu trữ Session được sử dụng phổ biến thông qua file server. Cả 2 cách lưu trữ session này đều được hỗ trợ mặc định bởi Laravel.
2 Cách Lưu Trữ Dữ Liệu Session Trong Laravel
Để lưu dữ liệu session (hay cụ thể hơn là lưu dữ liệu của phần tử vào trong session) chúng ta có 2 cách khách nhau:
- Lưu dữ liệu session sử dụng file
- Lưu dữ liệu theo kiểu flash
Gán Dữ Liệu Session Trong File
Dữ liệu sẽ được lưu trong một file session trên server và tồn tại cho nhiều lượt truy cập khác nhau diễn ra tiếp theo và chỉ mất cho tới khi session kết thúc (ví dụ như cookies ở phía client bị thay đổi, xoá hoặc expire hoặc file session trên server bị xoá).
Để lưu trữ dữ liệu session sử dụng file chúng ta sẽ sử dụng câu lệnh Session::put() của Laravel, ví dụ:
Session::put('key', 'value')
Trong đó key là tên của phần tử sẽ được lưu trong mảng session và value là giá trị tương ứng.
Ví dụ sau sử dụng Session::put() để lưu trữ dữ liệu hoạt động của người dùng đã nhấp vào nút tắt popup hay chưa:
Session::put('clicked_close_popup_button', true);
Để lấy ra phần tử được lưu trữ vào session:
Session::get('key')
Với ví dụ tắt popup trên:
$hasClickedCloseButton = Session::get('clicked_close_popup_button');
Chúng ta cũng sử dụng Session::put() để cập nhật giá trị cho phần tử session:
Session::put('clicked_close_popup_button', false);
Để xoá phần tử được lưu trong session chúng ta có hai cách khác nhau:
Session::forget('clicked_close_popup_button');
Hoặc:
$hasClickedCloseButton = Session::pull('clicked_close_popup_button');
Với Session::pull() thì Laravel sẽ trả về giá trị của phần tử session đó trước khi xoá giá trị của nó.
Cách lưu dữ liệu session này thường được sử dụng trong tình huống bạn cần lưu trữ thông tin về hoạt động, trạng thái của cùng một truy cập để có thể sử dụng lại trong suốt các lần truy cập tiếp theo (tất nhiên là cần trong cùng một session).
Ngoài ra với các phần tử session có kiểu dữ liệu mảng bạn có thể sử dụng Session::push() để đấy thêm giá trị vào mảng của phần tử session này. Ví dụ nếu như trong trường hợp trên trang của bạn có nhiều popup khác nhau và bạn cần lưu trữ hoạt động tắt/mở các popup của người dùng với từng popup thì lúc này bạn có thể sử dụng đoạn code sau:
Session::push('user_clicked_buttons', 'newsletter_subscribe_popup'); Session::push('user_clicked_buttons', 'job_notification_popup'); //...
Với trường hợp trên thì giá trị của phần tử session với khoá user_clicked_buttons sẽ là một mảng.
Gán Dữ Liệu Session Theo Kiểu Flash
Cách làm này cũng tương tự như khi lưu dữ liệu session sử dụng file, tuy nhiên dữ liệu được lưu theo cách này chỉ tồn tại trong một truy cập duy nhất diễn ra ngay sau lượt truy cập mà việc gán dữ liệu được thực hiện.
Để lưu dữ liệu session theo kiểu flash trong Laravel chúng ta sẽ sử dụng cú pháp sau:
Session::flash('key', 'value')
Trong đó key là tên của phần tử sẽ được lưu trong mảng session và value là giá trị tương ứng.
Flash session thường được dùng khi chúng ta muốn lưu trữ một thông báo hoặc trạng thái của truy cập được trả về từ server sau khi người dùng thực hiện một hành động nào đó ví dụ như cập nhật thông tin cá nhân, tạo mới, chỉnh sửa hoặc xoá bài viết...
Ví dụ sau lưu trữ thông báo vào trong session sử dụng khoá có tên là message:
Session::flash('message', 'Mật khẩu được cập nhật thành công!')
Lúc này ở View để lấy ra giá trị của phần tử với khoá message trong session thì chúng ta sẽ làm như sau:
$msg = Session::get('message');
Kết Luận
Lư trữ session sử dụng file server là cách thức được sử dụng phần lớn trong các ứng dụng web application. Ngoài 2 cách này chúng ta còn có thể lưu dữ liệu session sử dụng database hoặc sử dụng session driver như Redis, Memcached hay thậm chí là sử dụng file cookie trong client (web browser). Ở các bài viết tiếp theo chúng ta sẽ đi vào tìm hiểu các cách thức lưu trữ này một cách chi tiết.