PHP - Sessions

Một phiên web là khoảng thời gian giữa thời điểm người dùng thiết lập kết nối với máy chủ và thời điểm kết nối bị chấm dứt. Cùng với cookies, các biến phiên giúp dữ liệu có thể truy cập trên nhiều trang của toàn bộ website.

Trong suốt một phiên, trang web duy trì thông tin về các hành động và sở thích của người dùng. Dữ liệu phiên được lưu trữ trong một mảng liên kết siêu toàn cục $_SESSION .

Để bắt đầu một phiên mới trong PHP, bạn cần gọi hàm session_start() .

Starting a Session

Để kích hoạt quyền truy cập vào dữ liệu phiên, hàm session_start() phải được gọi. Hàm session_start() tạo một phiên hoặc tiếp tục phiên hiện tại dựa trên một định danh phiên được truyền qua yêu cầu GET hoặc POST, hoặc được truyền qua cookie.

session_start(array $options = []): bool

Hàm này trả về true nếu một phiên làm việc đã được khởi động thành công, ngược lại trả về false .

PHP trước tiên tạo ra một định danh duy nhất cho phiên làm việc cụ thể đó, đó là một chuỗi ngẫu nhiên gồm 32 số thập lục phân.

Hàm session_id() thiết lập hoặc lấy một ID phiên duy nhất.

session_id(?string $id = null): string|false

PHP sẽ tạo ra một ID phiên ngẫu nhiên, nếu tham số $id không được cung cấp. Bạn có thể chỉ định ID của riêng mình thay vào đó. Hàm này trả về ID phiên cho phiên hiện tại hoặc chuỗi rỗng nếu không có phiên hiện tại. Trong trường hợp thất bại, nó sẽ trả về false .

Example

Hãy xem xét ví dụ sau −

<?php  
   // Starting the session
   session_start();
   $id = session_id();
   echo "Session Id: ".$id ;
?>

Trình duyệt sẽ hiển thị một chuỗi ngẫu nhiên dưới dạng output

Session Id: mi3976f8ssethe9f04vq1ag6it

Một cookie có tên PHPSESSID được tự động gửi đến máy tính của người dùng để lưu trữ chuỗi nhận dạng phiên duy nhất.

PHP Sessions 1

Một phiên tạo ra một tệp trong một thư mục tạm thời trên máy chủ, nơi các biến phiên đã đăng ký và giá trị của chúng được lưu trữ. Dữ liệu này sẽ có sẵn cho tất cả các trang trên trang web trong suốt chuyến thăm đó.

Vị trí của tệp tạm thời được xác định bởi một cài đặt trong tệp "php.ini" gọi là "session.save_path".

Handling Session Variables

Biến phiên (Session variables) được lưu trữ trong một mảng liên kết gọi là $_SESSION[]. Những biến này có thể được truy cập trong suốt thời gian của một phiên.

Để tạo một biến phiên mới, hãy thêm một cặp khóa-giá trị vào mảng $_SESSION .

$_SESSION[ "var"]=value;

Để đọc lại giá trị của một biến phiên, bạn có thể sử dụng các câu lệnh echo/print, hoặc các hàm var_dump() hoặc print_r().

echo $_SESSION[ "var"];

Để lấy danh sách tất cả các biến phiên trong phiên hiện tại, bạn có thể sử dụng một vòng lặp foreach để duyệt qua $_SESSION.

foreach ($_SESSION as $key=>$val)
echo $key . "=>" . $val;

Example

Ví dụ dưới đây bắt đầu một phiên làm việc, sau đó đăng ký một biến có tên là counter, biến này sẽ được tăng lên mỗi lần trang được truy cập trong phiên làm việc.

Sử dụng isset() function để kiểm tra xem biến phiên đã được thiết lập hay chưa.

Đoạn mã PHP sau khởi động một phiên khi nó chạy lần đầu tiên và thiết lập một biến phiên có tên là counter. Khi khách hàng truy cập lại cùng một URL, vì biến phiên đã được thiết lập, counter sẽ được tăng lên.

<?php
   session_start();
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   } else {
      $_SESSION['counter'] = 1;
   }
   $msg = "Number of visits in this session: ".  $_SESSION['counter'];
?>
<?php  
   echo "$msg"; 
?>

Làm mới trình duyệt nhiều lần để mô phỏng các lần truy cập lặp lại. Trình duyệt hiển thị bộ đếm −

Number of visits in this session: 5

Destroying a PHP Session

Một phiên PHP có thể bị hủy bằng cách sử dụng hàm session_destroy(). Hàm này không cần bất kỳ tham số nào và một lần gọi có thể hủy tất cả các biến phiên. Nếu bạn muốn hủy một biến phiên duy nhất, bạn có thể sử dụng hàm unset() để xóa một biến phiên.

Dưới đây là một ví dụ về unset a single variable

<?php
   unset($_SESSION['counter']);
?>

Dưới đây là lệnh gọi sẽ destroy all the session variables

<?php
   session_destroy();
?>

Bạn không cần gọi hàm start_session() để bắt đầu một phiên khi người dùng truy cập vào trang web của bạn nếu bạn có thể đặt biến session.auto_start thành 1 trong tệp php.ini.

Example

Đoạn mã PHP sau đây tạo ra một biểu mẫu HTML. Dữ liệu từ biểu mẫu được sử dụng để tạo ba biến phiên. Một liên kết siêu văn bản dẫn trình duyệt đến một trang khác, trang này sẽ đọc lại các biến phiên.

<html>
<body>
   <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
      <h3>User's ID: <input type="text" name="ID"/></h3>
      <h3>User's Name: <input type="text" name="name"/></h3>
      <h3>User Type: <input type="text" name="type"/></h3>
      <input type="submit" value="Submit" />
   </form>

   <?php
      session_start();
      if ($_SERVER["REQUEST_METHOD"] == "POST") {
         $_SESSION['ID'] = $_POST['ID'];
         $_SESSION['Name'] = $_POST['name'];
         $_SESSION['type'] = $_POST['type'];

         echo "<h2>Following Session variables Created</h2>";
         foreach ($_SESSION as $key=>$val) {
            echo "<h3>" . $key . "=>" . $val . "</h3>";
         }
         echo "<a href='test.php'><b>Click Here</b></a>";
      }
   ?>
</body>
</html>

Lưu đoạn mã này với tên "hello.php" trong thư mục gốc tài liệu, và mở nó trong trình duyệt của khách hàng.

PHP Sessions 2

Nhấn nút Submit . Trình duyệt sẽ hiển thị các biến phiên đã được tạo −

PHP Sessions 3

Trình duyệt điều hướng đến một trang khác bằng cách theo liên kết được hiển thị. Nó đọc lại các biến phiên.

PHP Sessions 3