目录

PHP 会话


会话是一种存储要在多个页面上使用的信息(在变量中)的方法。

与 cookie 不同,该信息不会存储在用户计算机上。


什么是 PHP 会话?

当您使用应用程序时,您打开它,进行一些更改,然后关闭它。这很像一个会话。计算机知道你是谁。它知道您何时启动应用程序以及何时结束。但在互联网上存在一个问题:网络服务器不知道你是谁或你在做什么,因为 HTTP 地址不维护状态。

会话变量通过存储跨多个页面使用的用户信息(例如用户名、最喜欢的颜色等)来解决这个问题。默认情况下,会话变量将持续到用户关闭浏览器为止。

所以;会话变量保存有关单个用户的信息,并且可用于一个应用程序中的所有页面。

提示:如果您需要永久存储,您可能希望将数据存储在数据库


启动 PHP 会话

会话开始于session_start()功能。

会话变量使用 PHP 全局变量:$_SESSION 设置。

现在,让我们创建一个名为"demo_session1.html" 的新页面。在此页面中,我们启动一个新的 PHP 会话并设置一些会话变量:

示例

<?php
// Start the session
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Set session variables
$_SESSION["favcolor"] = "green";
$_SESSION["favanimal"] = "cat";
echo "Session variables are set.";
?>

</body>
</html>
运行示例 »

笔记:这个session_start()函数必须是文档中的第一个内容。在任何 HTML 标记之前。



获取 PHP 会话变量值

接下来,我们创建另一个名为"demo_session2.html" 的页面。从此页面中,我们将访问我们在第一页 ("demo_session1.html") 上设置的会话信息。

请注意,会话变量不会单独传递到每个新页面,而是从我们在每个页面开头打开的会话中检索它们(session_start())。

另请注意,所有会话变量值都存储在全局 $_SESSION 变量中:

示例

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// Echo session variables that were set on previous page
echo "Favorite color is " . $_SESSION["favcolor"] . ".<br>";
echo "Favorite animal is " . $_SESSION["favanimal"] . ".";
?>

</body>
</html>
运行示例 »

显示用户会话的所有会话变量值的另一种方法是运行以下代码:

示例

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
print_r($_SESSION);
?>

</body>
</html>
运行示例 »

它是如何工作的?它怎么知道是我?

大多数会话在用户计算机上设置一个用户密钥,如下所示:765487cf34ert8dede5a562e4f3a7e12。然后,当在另一个页面上打开会话时,它会扫描计算机以查找用户密钥。如果存在匹配,则访问该会话,如果不匹配,则启动新会话。


修改 PHP 会话变量

要更改会话变量,只需覆盖它:

示例

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// to change a session variable, just overwrite it
$_SESSION["favcolor"] = "yellow";
print_r($_SESSION);
?>

</body>
</html>
运行示例 »

销毁 PHP 会话

要删除所有全局会话变量并销毁会话,请使用session_unset()session_destroy():

示例

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<body>

<?php
// remove all session variables
session_unset();

// destroy the session
session_destroy();
?>

</body>
</html>
运行示例 »

PHP练习

通过练习测试一下

练习:

创建一个名为 "favcolor" 的会话变量。

session_start();
["favcolor"] = "green";