PHP - 会话

在整个网站的各个页面上访问数据的另一种方法是使用PHP会话.

会话在注册的服务器上的临时目录中创建文件会话变量及其值存储.在访问期间,此数据将可供网站上的所有页面使用.

临时文件的位置由 php.ini 文件中的设置决定叫 session.save_path .在使用任何会话变量之前,请确保已设置此路径.

当会话开始后,事情发生并减去;

  • PHP首先为该特定会话创建一个唯一标识符,该标识符是32个十六进制数字的随机字符串,例如3c7foj34c3jj973hjkop2fc937e3443.

  • 名为 PHPSESSID 的cookie会自动发送到用户的计算机以存储唯一的会话标识字符串.

  • 自动创建文件指定临时目录中的服务器,并带有以sess_为前缀的唯一标识符的名称,即sess_3c7foj34c3jj973hjkop2fc937e3443.

当PHP脚本想要从会话变量中检索值,PHP自动从PHPSESSID cookie中获取唯一的会话标识符字符串,然后在其临时目录中查找带有该名称的文件,并且可以通过比较两个va来完成验证lues.

会话在用户丢失浏览器或离开网站后结束,服务器将在预定的一段时间后终止会话,通常持续30分钟.

启动PHP会话

通过调用 session_start()函数可以轻松启动PHP会话.此函数首先检查如果会话已经启动,如果没有启动,那么它将启动一个会话.建议在页面开头调用 session_start().

会话变量存储在名为 $ _ SESSION [的关联数组中] 的.这些变量可以在会话的生命周期内访问.

以下示例启动一个会话,然后注册一个名为 counter 的变量,每次访问该页面时都会增加在会话期间.

利用 isset()函数检查会话变量是否已设置.

将此代码放在test.php文件中并多次加载此文件以查看结果 :

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

它将产生以下结果 :

You have visited this page 1in this session.

销毁PHP会话

session_destroy()可以销毁PHP会话功能.此函数不需要任何参数,单个调用可以销毁所有会话变量.如果要销毁单个会话变量,则可以使用 unset()函数取消设置会话变量.

以下是取消设置单个变量的示例 :

<?php
   unset($_SESSION['counter']);
?>

这是一个会破坏所有会话变量的调用 :

<?php
   session_destroy();
?>

开启自动会话

当a时,你不需要调用start_session()函数来启动会话如果您可以在 php.ini 文件中将 session.auto_start 变量设置为1,则用户访问您的网站.

没有Cookie的会话

可能存在用户不允许在其计算机上存储cookie的情况.因此,还有另一种方法可以将会话ID发送到浏览器.

或者,您可以使用会话开始时定义的常量SID.如果客户端未发送适当的会话cookie,则其形式为session_name = session_id.否则,它会扩展为空字符串.因此,您可以无条件地将其嵌入到URL中.

以下示例演示如何注册变量,以及如何使用SID正确链接到另一个页面.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

它将产生以下结果 :

You have visited this page 1in this session.
To continue click following link

打印SID时可以使用 htmlspecialchars()以防止XSS相关攻击.