PHP 会话

PHP 会话

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

会话在服务器上的临时目录中创建一个文件,其中存储了注册的会话变量及其值。在访问期间,该数据将对站点上的所有页面都可用。

临时文件的位置由php.ini文件中的一个设置决定,该设置称为session.save_path。在使用任何会话变量之前,请确保您已经设置了此路径。

开始会话后,以下事情发生:

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

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

  • 在指定的临时目录上自动创建一个文件,并带有sess_前缀的唯一标识符的名称,即sess_3c7foj34c3jj973hjkop2fc937e3443。

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

当用户关闭浏览器或离开网站后,会话结束,服务器将在预定的一段时间后终止会话,通常为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();
?>

开启自动会话

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

没有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

htmlspecialchars()可以用于打印SID,以防止XSS相关攻击。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程