在本教程中,您将学习如何使用PHP会话将某些数据临时存储在服务器上。
尽管您可以使用Cookie存储数据,但是它存在一些安全问题。 由于cookie存储在用户计算机上,因此攻击者可以轻松地修改cookie内容,以在您的应用程序中插入可能有害的数据,从而可能破坏您的应用程序。
此外,每次浏览器向服务器请求URL时,网站的所有cookie数据都会在请求中自动发送到服务器。 这意味着如果您在用户系统上存储了5个Cookie,每个Cookie的大小为4KB,则浏览器需要在用户每次查看页面时上传20KB的数据,这可能会影响您站点的性能。
您可以通过使用PHP session来解决这两个问题。 PHP session将数据存储在服务器而不是用户的计算机上。 在基于会话的环境中,每个用户都是通过称为会话标识符或SID的唯一编号来标识的。 此唯一的会话ID用于将每个用户与自己在服务器上的信息(例如电子邮件,帖子等)链接起来。
提示:session ID是由PHP引擎随机生成的,几乎无法猜测。此外,由于会话数据存储在服务器上,因此不必随每个浏览器请求一起发送。
在将任何信息存储在会话变量中之前,必须首先启动Session。要开始新的Session,只需调用PHP session_start()函数。它将创建一个新会话并为用户生成一个唯一的Session ID。
下面示例中的PHP代码只是开始一个新Session。
<?php //开始 session session_start(); ?>
session_start()函数首先通过查找会话ID的存在来检查会话是否已经存在。如果找到一个会话,即会话已经启动,则设置会话变量,如果没有,则通过创建新的会话ID来启动新会话。
注意:您必须session_start()在页面的开头(即在浏览器中脚本生成的任何输出之前)调用该函数,就像在使用setcookie()函数设置cookie时一样。
您可以将所有会话数据作为键值对存储在$_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关联数组的相应键,如以下示例所示:
<?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变量的值来调整此超时时间。