返回首页
当前位置: 主页 > 编程语言 > PHP教程 >

PHP-会话

时间:2020-06-18 14:52来源:电脑教程学习网 www.etwiki.cn 编辑:小山哥

使数据可跨整个网站的各个页面访问的另一种方法是使用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 []的关联数组中在会话的生存期内可以访问这些变量。

下面的示例启动一个会话,然后注册一个称为计数器的变量该变量在会话期间每次访问页面时都会增加。

利用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()可以为了防止XSS相关的攻击打印SID时使用。

------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
  • PHP-使用PHP发送电子邮件

    必须在 php.ini 文件中 正确配置PHP ,并详细说明系统如何发送电子邮件。 打开 / etc ...

  • PHP-会话

    使数据可跨整个网站的各个页面访问的另一种方法是使用PHP会话。 会话在服务器上的临时...

  • PHP-Cookies

    Cookies是存储在客户端计算机上的文本文件,并且保留使用跟踪目的。 PHP透明地支持HTT...

  • PHP-文件包含

    您可以在服务器执行之前将一个PHP文件的内容包含到另一个PHP文件中。 有两个PHP函数可...

  • PHP-GET和POST方法

    浏览器客户端可以通过两种方式将信息发送到Web服务器。 GET方法 POST方法 在浏览器发...

  • PHP-网络概念

    该会议演示了PHP如何根据浏览器类型,随机生成的数字或用户输入提供动态内容。 它还演...

猜你感兴趣