session(phiên làm việc) trong PHP là một cách để lưu trữ thông tin (dữ liệu) trên nhiều trang web. Không giống như cookie, dữ liệu phiên được lưu trữ trên máy chủ và chỉ có một ID phiên duy nhất được lưu trữ trên máy khách.
Bắt đầu một session
session_start()
Hàm session_start()
được sử dụng để bắt đầu một phiên hoặc tiếp tục một phiên hiện có. Hàm này phải được gọi ở đầu mỗi trang PHP trước khi có bất kỳ đầu ra nào.
Cú pháp
session_start();
Ví dụ
session_start();
$_SESSION['username'] = "JohnDoe";
echo "Session started and username is set.";
Truy cập dữ liệu phiên
Dữ liệu phiên được lưu trữ trong biến siêu toàn cục $_SESSION
. Bạn có thể truy cập và sửa đổi dữ liệu này giống như một mảng liên kết.
Ví dụ
session_start();
echo "Username: " . $_SESSION['username']; // Output: Username: JohnDoe
Kiểm tra sự tồn tại của dữ liệu phiên
Bạn có thể sử dụng hàm isset()
để kiểm tra xem một biến phiên có tồn tại hay không.
Ví dụ
session_start();
if (isset($_SESSION['username'])) {
echo "Username is set.";
} else {
echo "Username is not set.";
}
Xóa dữ liệu phiên
unset()
Hàm unset()
được sử dụng để xóa một biến phiên cụ thể.
Ví dụ
session_start();
unset($_SESSION['username']);
echo "Username session variable is unset.";
session_unset()
Hàm session_unset()
được sử dụng để xóa tất cả các biến phiên.
Ví dụ
session_start();
session_unset();
echo "All session variables are unset.";
session_destroy()
Hàm session_destroy()
được sử dụng để hủy phiên hiện tại. Hàm này không xóa các biến phiên ngay lập tức, nhưng sẽ xóa chúng khi phiên kết thúc.
Ví dụ
session_start();
session_destroy();
echo "Session destroyed.";
Thiết lập thời gian sống của phiên
Bạn có thể thiết lập thời gian sống của phiên bằng cách cấu hình session.gc_maxlifetime
trong tệp php.ini
hoặc sử dụng hàm ini_set()
.
Ví dụ
ini_set('session.gc_maxlifetime', 3600); // Thiết lập thời gian sống của phiên là 1 giờ
session_start();
Lưu trữ dữ liệu phức tạp trong phiên
Bạn có thể lưu trữ các loại dữ liệu phức tạp như mảng và đối tượng trong phiên.
Ví dụ
session_start();
$_SESSION['user'] = [
'username' => 'JohnDoe',
'email' => 'john@example.com',
'roles' => ['admin', 'editor']
];
echo "Username: " . $_SESSION['user']['username']; // Output: Username: JohnDoe
Sự khác biệt giữa Session và Cookie
Session
- Dữ liệu được lưu trữ trên máy chủ.
- Bảo mật hơn vì dữ liệu không được lưu trữ trên máy khách.
- Thời gian sống ngắn hơn, thường kết thúc khi trình duyệt đóng.
- Sử dụng để lưu trữ thông tin nhạy cảm và dữ liệu người dùng trong suốt phiên làm việc.
Cookie
- Dữ liệu được lưu trữ trên máy khách.
- Ít bảo mật hơn vì dữ liệu có thể bị truy cập bởi người dùng.
- Thời gian sống có thể được thiết lập dài hạn.
- Sử dụng để lưu trữ thông tin không nhạy cảm và dữ liệu cần duy trì qua nhiều phiên làm việc.
Use Case
Session
- Lưu trữ thông tin đăng nhập của người dùng.
- Lưu trữ dữ liệu giỏ hàng trong các trang thương mại điện tử.
- Lưu trữ các thiết lập người dùng tạm thời.
Cookie
- Lưu trữ thông tin đăng nhập tự động.
- Lưu trữ các tùy chọn người dùng như ngôn ngữ và giao diện.
- Theo dõi hành vi người dùng trên trang web.
Demo
Session Demo
// Bắt đầu phiên
session_start();
// Thiết lập biến phiên
$_SESSION['username'] = "JohnDoe";
// Truy cập biến phiên
echo "Username: " . $_SESSION['username']; // Output: Username: JohnDoe
// Xóa biến phiên
unset($_SESSION['username']);
// Hủy phiên
session_destroy();
Cookie Demo
// Thiết lập cookie
setcookie("user", "JohnDoe", time() + 3600, "/"); // Cookie tồn tại trong 1 giờ
// Truy cập cookie
if (isset($_COOKIE['user'])) {
echo "User is " . $_COOKIE['user']; // Output: User is JohnDoe
} else {
echo "User cookie is not set.";
}
// Xóa cookie
setcookie("user", "", time() - 3600, "/"); // Xóa cookie 'user'
Kết luận
Phiên trong PHP là một công cụ mạnh mẽ để lưu trữ thông tin trên nhiều trang web. Bằng cách hiểu và sử dụng các hàm phiên như session_start()
, $_SESSION
, unset()
, và session_destroy()
, bạn có thể quản lý dữ liệu phiên một cách hiệu quả và an toàn. Cookie cũng là một công cụ hữu ích để lưu trữ dữ liệu trên máy khách, nhưng cần được sử dụng cẩn thận để đảm bảo bảo mật.