PHP - Phiên

Một cách khác để làm cho dữ liệu có thể truy cập được trên các trang khác nhau của toàn bộ trang web là sử dụng Phiên PHP.

Một phiên tạo một tệp trong 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 lần truy cập đó.

Vị trí của tệp tạm thời được xác định bởi một cài đặt trong php.ini tệp được gọi là session.save_path. Trước khi sử dụng bất kỳ biến phiên nào, hãy đảm bảo rằng bạn đã thiết lập đường dẫn này.

Khi một phiên được bắt đầu, những điều sau đây sẽ xảy ra:

  • Đầu tiên PHP tạo một mã định danh duy nhất cho phiên cụ thể đó là một chuỗi ngẫu nhiên gồm 32 số thập lục phân như 3c7foj34c3jj973hjkop2fc937e3443.

  • Một cookie được gọi là 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.

  • Tệp được tạo tự động trên máy chủ trong thư mục tạm thời được chỉ định và mang tên của số nhận dạng duy nhất có tiền tố là sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.

Khi một tập lệnh PHP muốn truy xuất giá trị từ một biến phiên, PHP sẽ tự động lấy chuỗi định danh phiên duy nhất từ ​​cookie PHPSESSID và sau đó tìm tệp mang tên đó trong thư mục tạm thời của nó và việc xác thực có thể được thực hiện bằng cách so sánh cả hai giá trị.

Phiên kết thúc khi người dùng mất trình duyệt hoặc sau khi rời khỏi trang web, máy chủ sẽ kết thúc phiên sau một khoảng thời gian định trước, thường là 30 phút.

Bắt đầu một phiên PHP

Một phiên PHP có thể dễ dàng bắt đầu bằng cách gọi đến session_start()Hàm này trước tiên sẽ kiểm tra xem một phiên đã được bắt đầu chưa và nếu không phiên nào được bắt đầu thì nó sẽ bắt đầu một phiên. Bạn nên thực hiện cuộc gọi đếnsession_start() ở đầu trang.

Các biến phiên được lưu trữ trong mảng kết hợp được gọi là $_SESSION[]. Các biến này có thể được truy cập trong suốt thời gian tồn tại của một phiên.

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

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

Đặt mã này vào tệp test.php và tải tệp này nhiều lần để xem kết quả -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

Nó sẽ tạo ra kết quả sau:

You have visited this page 1in this session.

Hủy một phiên PHP

Một phiên PHP có thể bị phá hủy bởi session_destroy()chức năng. Hàm này không cần bất kỳ đối số nào và một lệnh 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 thì bạn có thể sử dụngunset() hàm để hủy đặt một biến phiên.

Đây là ví dụ để hủy đặt một biến duy nhất -

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

Đây là lệnh gọi sẽ hủy tất cả các biến phiên -

<?php
   session_destroy();
?>

Bật phiên tự động

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 trang web của bạn nếu bạn có thể đặt session.auto_start biến thành 1 trong php.ini tập tin.

Phiên không có cookie

Có thể có trường hợp người dùng không cho phép lưu trữ cookie trên máy của họ. Vì vậy, có một phương pháp khác để gửi ID phiên đến trình duyệt.

Ngoài ra, bạn có thể sử dụng SID không đổi được xác định nếu phiên bắt đầu. Nếu khách hàng không gửi cookie phiên thích hợp, nó có dạng session_name = session_id. Nếu không, nó mở rộng thành một chuỗi rỗng. Vì vậy, bạn có thể nhúng nó vào URL vô điều kiện.

Ví dụ sau minh họa cách đăng ký một biến và cách liên kết chính xác đến một trang khác bằng SID.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Nó sẽ tạo ra kết quả sau:

You have visited this page 1in this session.
To continue click following link

Các htmlspecialchars() có thể được sử dụng khi in SID để ngăn chặn các cuộc tấn công liên quan đến XSS.