Php 简明教程

PHP - $_SESSION

PHP 中的超全局变量之一 $_SESSION 是当前脚本中可用的会话变量的关联数组。 $HTTP_SESSION_VARS 也包含相同的信息,但它不是超全局变量,现在已被弃用。

One of the superglobal variables in PHP, $_SESSION is an associative array of session variables available in the current script. $HTTP_SESSION_VARS also contains the same information, but it is not a superglobal, and it has now been deprecated.

What is a Session?

会话是另一种方法,可跨整个网站的页面访问数据。它是用户与服务器建立连接时和连接终止时之间的持续时间。在此时间段内,用户可能会导航到不同的页面。许多时候,希望某些数据持续可在所有页面中使用。这由 session variables 实现。

A Session is an alternative way to make data accessible across the pages of an entire website. It is the time duration between the time a user establishes a connection with a server and the time the connection is terminated. During this interval, the user may navigate to different pages. Many times, it is desired that some data is persistently available across the pages. This is facilitated by session variables.

会话在服务器临时目录中创建一个文件,其中存储已注册的会话变量及其值。此数据在该访问期间可供站点上的所有页面使用。

A session creates a file in a temporary directory on the server where the registered session variables and their values are stored. This data will be available to all the pages on the site during that visit.

服务器为每个会话分配一个唯一的 SESSIONID。由于 HTTP 是一种无状态协议,因此当会话终止时,会话变量中的数据将自动删除。

The server assigns a unique SESSIONID to each session. Since HTTP is a stateless protocol, data in session variables is automatically deleted when the session is terminated.

The session_start() Function

为了启用对会话数据的访问,必须调用 session_start() 函数。session_start() 基于通过 GET 或 POST 请求或通过 Cookie 传递的会话标识符创建一个会话或恢复当前会话。

In order to enable access to session data, the session_start() function must be invoked. session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie.

session_start(array $options = []): bool

如果会话已成功启动,则此函数返回 true ,否则返回 false

This function returns true if a session was successfully started, else it returns false.

Handling Session Variables

要创建新的会话变量,请在 $_SESSION 数组中添加键值对 −

To create a new session variable, add a key-value pair in the $_SESSION array −

$_SESSION[ "var"]=value;

要读回会话变量的值,您可以使用 echo/print 语句或 var_dump()print_r() 函数。

To read back the value of a session variable, you can use echo/print statements, or var_dump() or print_r() functions.

echo $_SESSION[ "var"];

要获取当前会话中所有会话变量的列表,可以使用 foreach 循环遍历 $_SESSION

To obtain the list of all the session variables in the current session, you can use a foreach loop to traverse the $_SESSION

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

若要手动清除所有会话数据,则有 session_destroy() 函数。也可以通过调用 unset() 函数来释放特定的会话变量。

To manually clear all the session data, there is session_destroy() function. A specific session variable may also be released by calling the unset() function.

unset($_SESSION[ "var"]);

List of Session Functions

在 PHP 中,有许多用于管理会话数据的内置函数。

In PHP, there are many built-in functions for managing the session data.

Session Functions

Description

session_abort

Discard session array changes and finish session

session_cache_expire

Return current cache expire

session_cache_limiter

Get and/or set the current cache limiter

session_commit

Alias of session_write_close

session_create_id

Create new session id

session_decode

Decodes session data from a session encoded string

session_destroy

Destroys all data registered to a session

session_encode

Encodes the current session data as a session encoded string

session_gc

Perform session data garbage collection

session_get_cookie_params

Get the session cookie parameters

session_id

Get and/or set the current session id

session_is_registered

Find out whether a global variable is registered in a session

session_module_name

Get and/or set the current session module

session_name

Get and/or set the current session name

session_regenerate_id

Update the current session id with a newly generated one

session_register_shutdown

Session shutdown function

session_register

Register one or more global variables with the current session

session_reset

Re-initialize session array with original values

session_save_path

Get and/or set the current session save path

session_set_cookie_params

Set the session cookie parameters

session_set_save_handler

Sets user-level session storage functions

session_start

Start new or resume existing session

session_status

Returns the current session status

session_unregister

Unregister a global variable from the current session

session_unset

Free all session variables

session_write_close

Write session data and end session

Example

以下 PHP 脚本呈现一个 HTML 表单。表格数据用于创建三个会话变量。一个超链接将浏览器带到另一个页面,该页面读回会话变量。

The following PHP script renders an HTML form. The form data is used to create three session variables. A hyperlink takes the browser to another page, which reads back the session variables.

将此代码另存为“test.php”,并将其保存在文档根目录中,然后使用浏览器打开它。输入数据,然后按 Submit 按钮。

Save this code as "test.php" in the document root folder, and open it in a client browser. Enter the data and press the Submit button.

<html>
<body>
   <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
      <h3>User's ID: <input type="text" name="ID"/></h3>
      <h3>Your Name: <input type="text" name="name"/></h3>
      <h3>Enter Age: <input type="text" name="age"/></h3>
      <input type="submit" value="Submit"/>
   </form>
   <?php
      session_start();
      if ($_SERVER["REQUEST_METHOD"] == "POST") {
         $_SESSION['UserID'] = $_POST['ID'];
         $_SESSION['Name'] = $_POST['name'];
         $_SESSION['age'] = $_POST['age'];
      }
      echo "Following Session Variables Created: \n";

      foreach ($_SESSION as $key=>$val)
      echo "<h3>" . $key . "=>" . $val . "</h3>";
      echo "<br/>" . '<a href="hello.php">Click Here</a>';
   ?>
</body>
</html>

单击“提交”按钮后,它将显示创建的所有会话变量的列表 -

When you click the "Submit" button, it will show a list of all the session variables created −

php $ session 1

接下来,在“hello.php”文件中保存以下脚本。

Next, have the following script in the "hello.php" file and save it.

<?php
session_start();
   echo "<h2>Following Session variables Read:</h2>";
   foreach ($_SESSION as $key=>$val)
   echo "<h3>" . $key . "=>" . $val . "</h3>";
?>

现在,点击“test.php”页面上的链接导航到“hello.php”。它将显示被读到的会话变量 -

Now, follow the link on the "test.php" page to navigate to "hello.php". It will show the session variables that are read −

php $ session 2