Session trong PHP
Trong hướng dẫn này, bạn sẽ học cách lưu trữ một số dữ liệu nhất định trên máy chủ trên cơ sở tạm thời bằng cách sử dụng Session trong PHP.
Session trong PHP là gì?
Mặc dù bạn có thể lưu trữ dữ liệu bằng cookie nhưng nó có một số vấn đề về bảo mật. Vì cookie được lưu trữ trên máy tính của người dùng nên kẻ tấn công có thể dễ dàng sửa đổi nội dung cookie để chèn dữ liệu có thể gây hại vào ứng dụng của bạn và có thể phá vỡ ứng dụng của bạn.
Ngoài ra, mỗi khi trình duyệt yêu cầu một URL đến máy chủ, tất cả dữ liệu cookie cho một trang web sẽ tự động được gửi đến máy chủ trong yêu cầu. Có nghĩa là nếu bạn đã lưu trữ 5 cookie trên hệ thống của người dùng, mỗi cookie có kích thước 4KB, trình duyệt cần tải lên 20KB dữ liệu mỗi khi người dùng xem một trang, điều này có thể ảnh hưởng đến hiệu suất trang web của bạn.
Bạn có thể giải quyết cả hai vấn đề này bằng cách sử dụng PHP Session. Một PHP Session lưu trữ dữ liệu trên máy chủ chứ không phải máy tính của người dùng. Trong môi trường dựa trên Session, mọi người dùng được xác định thông qua một số duy nhất được gọi là số nhận dạng Session hoặc SID. Session ID duy nhất này được sử dụng để liên kết mỗi người dùng với thông tin của riêng họ trên máy chủ như email, bài đăng, v.v.
Mẹo: Session ID được tạo ngẫu nhiên bởi công cụ PHP, điều này hầu như không thể đoán được. Hơn nữa, bởi vì dữ liệu Session được lưu trữ trên máy chủ, nó không phải được gửi theo mọi yêu cầu của trình duyệt.
Bắt đầu một PHP Session
Trước khi bạn có thể lưu trữ bất kỳ thông tin nào trong các biến Session, trước tiên bạn phải bắt đầu Session. Để bắt đầu một Session mới, chỉ cần gọi hàm session_start() trong PHP . Nó sẽ tạo một Session mới và tạo một Session ID duy nhất cho người dùng.
Mã PHP trong ví dụ dưới đây chỉ đơn giản là bắt đầu một Session mới.
Ví dụ
<?php
// Starting session
session_start();
?>
Trước tiên hàm session_start()
sẽ kiểm tra xem một Session đã tồn tại hay chưa bằng cách tìm kiếm sự hiện diện của Session ID. Nếu nó tìm thấy một, tức là nếu Session đã được bắt đầu, nó sẽ thiết lập các biến Session và nếu không, nó sẽ bắt đầu một Session mới bằng cách tạo một Session ID mới.
Ghi chú: Bạn phải gọi hàm session_start()
ở đầu trang, tức là trước bất kỳ một lệnh nào được tạo bởi tập lệnh của bạn trong trình duyệt, giống như bạn làm trong khi đặt cookie với hàm setcookie()
.
Lưu trữ và truy cập dữ liệu Session
Bạn có thể lưu trữ tất cả dữ liệu Session của mình dưới dạng các cặp khóa-giá trị trong mảng siêu toàn cầu (superglobal) $_SESSION[]
. Dữ liệu được lưu trữ có thể được truy cập trong suốt thời gian tồn tại của một Session. Hãy xem xét tập lệnh sau, tập lệnh này tạo một Session mới và đăng ký hai biến cho Session.
Ví dụ
<?php
// Starting session
session_start();
// Storing session data
$_SESSION["firstname"] = "Tam";
$_SESSION["lastname"] = "Nguyen";
?>
Để truy cập dữ liệu Session mà chúng tôi đã đặt trên ví dụ trước của chúng tôi từ bất kỳ trang nào khác trên cùng một miền web - chỉ cần tạo lại Session bằng cách gọi session_start()
và sau đó chuyển khóa tương ứng vào mảng kết hợp $_SESSION
.
Ví dụ
<?php
// Starting session
session_start();
// Accessing session data
echo 'Xin chào, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"];
?>
Mã PHP trong ví dụ trên tạo ra kết quả sau.
Ghi chú: Để truy cập dữ liệu Session trong cùng một trang, không cần tạo lại Session vì nó đã được bắt đầu trên đầu trang.
Hủy một Session
Nếu bạn muốn xóa dữ liệu Session nhất định, chỉ cần bỏ đặt khóa tương ứng của mảng kết hợp $_SESSION
, như được hiển thị trong ví dụ sau:
Ví dụ
<?php
// Starting session
session_start();
// Removing session data
if(isset($_SESSION["lastname"])){
unset($_SESSION["lastname"]);
}
?>
Tuy nhiên, để hủy hoàn toàn một Session, chỉ cần gọi hàm session_destroy()
. Hàm này không cần bất kỳ đối số nào và một lệnh gọi sẽ hủy tất cả dữ liệu Session.
Ví dụ
<?php
// Starting session
session_start();
// Destroying session
session_destroy();
?>
Ghi chú: Trước khi hủy một Session bằng hàm session_destroy()
, trước tiên bạn cần tạo lại môi trường Session nếu nó chưa có ở đó bằng cách sử dụng hàm session_start()
, để có thứ gì đó mà hủy.
Mỗi PHP Session đều có một giá trị thời gian chờ - thời lượng, được đo bằng giây - xác định thời gian một Session sẽ tồn tại trong trường hợp không có bất kỳ hoạt động nào của người dùng. Bạn có thể điều chỉnh khoảng thời gian chờ này bằng cách thay đổi giá trị của biến session.gc_maxlifetime
trong tệp cấu hình PHP ( php.ini
).