PHP session 会话
PHP session 变量用于存储有关用户会话的信息。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
与 cookie 不同,信息不存储在用户计算机上。
PHP Session 会话
您在计算机上操作某个应用程序时,您打开它,做些更改,然后关闭它。这很像一次会话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。然而,在因特网上问题出现了:由于 HTTP 地址无法保持状态,Web 服务器并不知道您是谁以及您做了什么。
PHP session 解决了这个问题,它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。
提示: 如果需要永久性存储,则可能需要将数据存储在数据库中。
开始 PHP Session
使用 session_start()
函数启动会话。
会话变量使用 PHP 全局变量设置: $_SESSION.
现在,让我们创建一个名为 "demo_session1.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 session 会话变量值
接下来,我们创建另一个名为"demo_session2.php"的页面。从这个页面,我们将访问我们在第一个页面上设置的会话信息("demo_session1.php")。
请注意,会话变量并不是单独传递给每个新页面,而是从我们在每个页面开头打开的会话(session_start()
)中检索。
还要注意,所有会话变量值都存储在 $_SESSION 全局会话变量中:
实例
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>
显示用户 session 会话的所有会话变量值的另一种方法是运行以下代码:
实例
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
print_r($_SESSION);
?>
</body>
</html>
它是如何工作的?它怎么知道是我?
大多数会话在用户计算机上设置的用户密钥如下所示:765487CF34ERT8DEDEDA562E4F3A7E12。然后,当在另一个页面上打开会话时,它会扫描计算机以查找用户密钥。如果存在匹配项,则访问该会话;如果不匹配,则启动新会话。
修改 PHP Session 变量
要更改会话变量,只需覆盖它:
实例
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
要删除所有全局会话变量并销毁会话, session_unset()
和 session_destroy()
:
实例
session_start();
?>
<!DOCTYPE html>
<html>
<body>
<?php
// remove all session variables
session_unset();
// destroy the session
session_destroy();
?>
</body>
</html>