PHP - 會話



Web 會話是指使用者與伺服器建立連線到連線終止之間的時間段。與 Cookie 一樣,會話變數使資料可在整個網站的各個頁面之間訪問。

在會話期間,網站會維護有關使用者操作和偏好的資訊。會話資料填充到超全域性關聯陣列$_SESSION中。

要在 PHP 中啟動新會話,您需要呼叫session_start()函式。

啟動會話

為了啟用對會話資料的訪問,必須呼叫session_start()函式。session_start()根據透過GET或POST請求傳遞的會話識別符號,或透過Cookie傳遞的會話識別符號來建立會話或恢復當前會話。

session_start(array $options = []): bool

如果會話成功啟動,此函式返回true,否則返回false

PHP首先為該特定會話建立一個唯一的識別符號,這是一個32個十六進位制數字的隨機字串。

session_id()函式設定或檢索唯一的會話ID。

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

如果沒有給出$id引數,PHP將生成一個隨機會話ID。您可以改用自己的ID。該函式返回當前會話的會話ID,如果當前沒有會話,則返回空字串。失敗時,它返回false

示例

看看下面的例子:

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

瀏覽器將顯示一個隨機字串作為輸出

Session Id: mi3976f8ssethe9f04vq1ag6it

名為PHPSESSID的Cookie會自動傳送到使用者的計算機,以儲存唯一的會話標識字串。

PHP Sessions 1

會話在伺服器上的臨時目錄中建立一個檔案,其中儲存已註冊的會話變數及其值。在訪問期間,網站上的所有頁面都可以使用此資料。

臨時檔案的位置由"php.ini"檔案中名為"session.save_path"的設定確定。

處理會話變數

會話變數儲存在名為$_SESSION[]的關聯陣列中。這些變數可以在會話的生命週期內訪問。

要建立一個新的會話變數,請在$_SESSION陣列中新增一個鍵值對:

$_SESSION[ "var"]=value;

要讀取會話變數的值,可以使用echo/print語句,或var_dump()或print_r()函式。

echo $_SESSION[ "var"];

要獲取當前會話中所有會話變數的列表,可以使用foreach迴圈遍歷$_SESSION:

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

示例

以下示例啟動一個會話,然後註冊一個名為counter的變數,每次在會話期間訪問頁面時都會遞增該變數。

使用isset()函式檢查會話變數是否已設定。

以下PHP指令碼在第一次執行時啟動一個會話,並設定一個名為counter的會話變數。當客戶端再次訪問相同的URL時,由於會話變數已設定,因此計數器會遞增。

<?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"; 
?>

多次重新整理瀏覽器以模擬重複訪問。瀏覽器顯示計數器:

Number of visits in this session: 5

銷燬PHP會話

可以使用session_destroy()函式銷燬PHP會話。此函式不需要任何引數,只需一次呼叫即可銷燬所有會話變數。如果要銷燬單個會話變數,則可以使用unset()函式來取消設定會話變數。

這是一個取消設定單個變數的示例:

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

這是將銷燬所有會話變數的呼叫:

<?php
   session_destroy();
?>

如果您可以將php.ini檔案中的session.auto_start變數設定為1,則當用戶訪問您的站點時,您無需呼叫start_session()函式來啟動會話。

示例

以下PHP指令碼呈現一個HTML表單。表單資料用於建立三個會話變數。超連結將瀏覽器帶到另一個頁面,該頁面讀取會話變數。

<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>

將此程式碼另存為文件根目錄中的"hello.php",然後在客戶端瀏覽器中開啟它。

PHP Sessions 2

按下提交按鈕。瀏覽器將顯示建立的會話變數:

PHP Sessions 3

瀏覽器透過點選顯示的連結導航到另一個頁面。它讀取會話變數。

PHP Sessions 3
廣告