PHP 会话
在本教程中,你将学习如何使用 PHP 会话临时在服务器上存储某些数据。
什么是会话
虽然你可以使用 Cookie 存储数据,但它存在一些安全问题。由于 cookie 存储在用户的计算机上,因此攻击者可以轻松修改 cookie 内容,从而在应用程序中插入可能会破坏应用程序的潜在有害数据。
此外,每次浏览器向服务器请求 URL 时,网站的所有 cookie 数据都会自动发送到请求中的服务器。这意味着如果你在用户系统上存储了 5 个 cookie,每个 cookie 的大小为 4KB,则每次用户查看页面时,浏览器都需要上传 20KB 的数据,这可能会影响你网站的性能。
你可以使用 PHP 会话解决这两个问题。PHP 会话将数据存储在服务器而不是用户的计算机上。在基于会话的环境中,通过称为会话标识符或 SID 的唯一编号来标识每个用户。此唯一会话 ID 用于将每个用户与他们自己在服务器上的信息(如电子邮件,帖子等)相关联。
提示: 会话 ID 由 PHP 引擎随机生成,几乎无法猜测。此外,由于会话数据存储在服务器上,因此不必随每个浏览器请求一起发送。
启动 PHP 会话
在将任何信息存储在会话变量中之前,必须先启动会话。要开始一个新会话,只需调用 PHP session_start()
函数即可。它将创建一个新会话并为用户生成唯一的会话 ID。
以下示例中的 PHP 代码只是启动一个新会话。
<?php
// Starting session
session_start();
?>
该 session_start()
函数首先通过查找会话 ID 的存在来检查会话是否已存在。如果找到一个,即如果会话已经启动,则会设置会话变量,如果没有,则通过创建新的会话 ID 来启动新会话。
注意: 你必须在页面开头调用 session_start()
函数,即在脚本在浏览器中生成的任何输出之前,就像你在设置 setcookie()
功能性 cookie 时一样。
存储和访问会话数据
你可以将所有会话数据存储为 $_SESSION[]
超全局数组中的键值对。可以在会话的生命周期内访问存储的数据。请考虑以下脚本,该脚本创建新会话并注册两个会话变量。
<?php
// Starting session
session_start();
// Storing session data
$_SESSION["firstname"] = "Peter";
$_SESSION["lastname"] = "Parker";
?>
要访问我们在前一个示例中从同一 Web 域上的任何其他页面设置的会话数据 - 只需通过调用重新创建会话 session_start()
,然后将相应的密钥传递给 $_SESSION
关联数组。
<?php
// Starting session
session_start();
// Accessing session data
echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"];
?>
上例中的 PHP 代码生成以下输出。
Hi, Peter Parker
注意: 要在同一页面中访问会话数据,不需要重新创建会话,因为它已经在页面顶部启动。
删除会话
如果要删除某些会话数据,只需取消设置 $_SESSION
关联数组的相应键,如下例所示:
<?php
// Starting session
session_start();
// Removing session data
if(isset($_SESSION["lastname"])){
unset($_SESSION["lastname"]);
}
?>
但是,要完全删除会话,只需调用 session_destroy()
函数即可。此函数不需要任何参数,单个调用会破坏所有会话数据。
<?php
// Starting session
session_start();
// Destroying session
session_destroy();
?>
注意: 在使用 session_destroy()
函数删除会话之前,如果尚未使用该 session_start()
函数,则需要首先重新创建会话环境,以便有一些东西可以销毁。
每个 PHP 会话都有一个超时值 - 一个以秒为单位的持续时间 - 它决定了在没有任何用户活动的情况下会话应该保持活动的时间。你可以通过更改 session.gc_maxlifetime
PHP 配置文件(php.ini
)中的变量值来调整此超时持续时间。