PHP Session

  • PHP Session

    在整个网站的各个页面上访问数据的另一种方法是使用PHP Session。Session在服务器上的临时目录中创建一个文件,其中存储了已注册的会话变量及其值。在访问期间,此数据将可供网站上的所有页面使用。临时文件的位置由php.ini文件中的名为session.save_path设置确定。在使用任何会话变量之前,请确保此路径存在。
    开始会话后
    • PHP首先为该特定会话创建唯一标识符,该标识符是32个十六进制数字的随机字符串,例如202cb962ac59075b964b07152d234b70。
    • 名为PHPSESSID的cookie 会自动发送到用户的计算机以存储唯一的会话标识字符串。
    • 在指定的临时目录中的服务器上自动创建一个文件,并带有以sess_为前缀的唯一标识符的名称,例如sess_202cb962ac59075b964b07152d234b70。
    当PHP脚本想要从会话变量中检索值时,PHP会自动从PHPSESSID cookie中获取唯一的会话标识符字符串,然后在其临时目录中查找带有该名称的文件,并且可以通过比较这两个值来完成验证。Session在用户丢失浏览器或离开站点后结束,服务器将在预定的一段时间后终止会话,通常持续30分钟。
  • 启动PHP session

    通过调用session_start()函数可以轻松启动PHP session。该函数首先检查会话是否已经启动,如果没有启动,则启动会话。建议将session_start()的调用放在页面的开头。session变量存储在名为$_SESSION[]的关联数组中。可以在会话的生命周期内访问这些变量。
    下面的示例启动一个session,然后注册一个名为counter的变量,每次在会话期间访问该页面时该变量都会递增。利用isset()函数检查会话变量是否已设置。
    将此代码放在test.php文件中并多次加载(刷新)此文件以查看结果
    <?php
       session_start();
       
       if( isset( $_SESSION['counter'] ) ) {
          $_SESSION['counter'] += 1;
       }else {
          $_SESSION['counter'] = 1;
       }
            
       $msg = "在这次会话中,您访问过此页面 ".  $_SESSION['counter']. "次。";
    ?>
    
    <html>
       
       <head>
          <title>设置一个PHP session</title>
       </head>
       
       <body>
          <?php  echo ( $msg ); ?>
       </body>
       
    </html>
    
  • 销毁PHP session

    session_destroy()函数可以销毁PHP session。此函数不需要任何参数,单个调用可以销毁所有会话变量。如果要销毁单个会话变量,则可以使用unset()函数取消设置会话变量。
    以下是取消设置单个变量的示例
    <?php
       unset($_SESSION['counter']);
    ?>
    
    这是将销毁所有会话变量
    <?php
       session_destroy();
    ?>
    
  • 启用自动会话

    如果您可以在php.ini文件中将session.auto_start变量设置为1,则无需调用start_session()函数即可在用户访问您的站点时启动Session。
  • 没有cookie的session

    可能存在用户不允许在其计算机上存储cookie的情况。因此,还有另一种方法可以将会话ID发送到浏览器。或者,您可以使用session_id()函数。如果客户端未发送适当的会话cookie,则其形式为session_name = session_id。否则,它会扩展为空字符串。因此,您可以无条件地将其嵌入到URL中。以下示例演示如何注册变量,以及如何使用session_id()正确传递到另一个页面。
    <?php
       session_start();
       
       if (isset($_SESSION['counter'])) {
          $_SESSION['counter'] = 1;
       }else {
          $_SESSION['counter']++;
       }
       
       $msg = "在这个会话中,您访问了页面 ".  $_SESSION['counter']." 次。";
      
       
       echo ( $msg );
    ?>
    
    <p>要继续,请单击以下链接 <br />
       
       <a  href = "nextpage.php?sid=<?php echo htmlspecialchars(session_id()); ?>">
    </p>
    
    提示:session和cookie是应对HTTP不跟踪用户状态产生的,实际开发中,慎用session,大规模集群中,session有很大的问题,把session存到数据库是很好的做法