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