PHP Session

在本教程中,您将学习如何使用PHP会话将某些数据临时存储在服务器上。

什么是Session

尽管您可以使用Cookie存储数据,但是它存在一些安全问题。 由于cookie存储在用户计算机上,因此攻击者可以轻松地修改cookie内容,以在您的应用程序中插入可能有害的数据,从而可能破坏您的应用程序。

此外,每次浏览器向服务器请求URL时,网站的所有cookie数据都会在请求中自动发送到服务器。 这意味着如果您在用户系统上存储了5个Cookie,每个Cookie的大小为4KB,则浏览器需要在用户每次查看页面时上传20KB的数据,这可能会影响您站点的性能。

您可以通过使用PHP session来解决这两个问题。 PHP session将数据存储在服务器而不是用户的计算机上。 在基于会话的环境中,每个用户都是通过称为会话标识符或SID的唯一编号来标识的。 此唯一的会话ID用于将每个用户与自己在服务器上的信息(例如电子邮件,帖子等)链接起来。

提示:session ID是由PHP引擎随机生成的,几乎无法猜测。此外,由于会话数据存储在服务器上,因此不必随每个浏览器请求一起发送。

开始 Session

在将任何信息存储在会话变量中之前,必须首先启动Session。要开始新的Session,只需调用PHP session_start()函数。它将创建一个新会话并为用户生成一个唯一的Session ID。

下面示例中的PHP代码只是开始一个新Session。

<?php
//开始 session
session_start();
?>

session_start()函数首先通过查找会话ID的存在来检查会话是否已经存在。如果找到一个会话,即会话已经启动,则设置会话变量,如果没有,则通过创建新的会话ID来启动新会话。

注意:您必须session_start()在页面的开头(即在浏览器中脚本生成的任何输出之前)调用该函数,就像在使用setcookie()函数设置cookie时一样。

存储和访问Session数据

您可以将所有会话数据作为键值对存储在$_SESSION[]超全局数组中。可以在会话的生存期内访问存储的数据。看以下脚本,该脚本创建一个新会话并注册两个会话变量。

<?php
//正在启动会话
session_start();
 
//存储会话数据
$_SESSION["firstname"] = "Peter";
$_SESSION["lastname"] = "Parker";
?>

要访问我们在上一个示例中从同一Web域的任何其他页面上设置的会话数据,只需调用session_start()即可重新创建会话,然后将相应的键传递给$_SESSION关联数组。

<?php
//正在启动会话
session_start();
 
//访问会话数据
echo 'Hi, ' . $_SESSION["firstname"] . ' ' . $_SESSION["lastname"];
?>

上面示例中的PHP代码产生以下输出。

Hi, Peter Parker

注意:要访问同一页面中的会话数据,无需重新创建会话,因为它已在页面顶部启动。

销毁 Session

如果要删除某些会话数据,只需取消设置$_SESSION关联数组的相应键,如以下示例所示:

<?php
//启动会话
session_start();
 
//正在删除会话数据
if(isset($_SESSION["lastname"])){
    unset($_SESSION["lastname"]);
}
?>

但是,要完全销毁会话,只需调用session_destroy()函数。该函数不需要任何参数,一次调用会销毁所有会话数据。

<?php
//启动会话
session_start();
 
//销毁会话
session_destroy();
?>

注意:在使用session_destroy()函数销毁会话之前,如果会话环境尚未存在,则需要先使用session_start()函数重新创建该会话环境,以便进行销毁。

每个PHP会话都有一个超时值(持续时间,以秒为单位),该值确定在没有任何用户活动的情况下会话应保持活动状态的时间。 您可以通过更改PHP配置文件(php.ini)中session.gc_maxlifetime变量的值来调整此超时时间。