一. 表单处理

1. $_GET

$变量 = $_GET["表单元素名"];

2. $_POST

$变量 = $_POST["表单元素名"];

3. $_REQUEST

$变量 = $_REQUEST["表单元素名"];

二. Cookie 使用

1. 设置Cookie信息

  1. setcookie(string $name, string $value = "", array $options = []): bool

创建 Cookie 语法格式一:

bool setcookie(名称 , 值)

注意:

  • Cookie 会在会话结束(浏览器整体关闭)时失效。
  • 查看 Cookie 信息,可以在浏览器地址栏前面的 叹号中查看

创建 Cookie 语法格式二:

bool setcookie(名称 , 值 , 有效期)

注意:Cookie 会在有效期过后失效。

2. 获取 Cookie信息

通过 HTTP Cookies 方式传递给当前脚本的变量的数组。用法和 $_GET, $_POST 等全局变法相同.

$变量 = $_COOKIE["名称"];

3. 删除 Cookie 信息

setcookie("名称","");

三. Session 使用

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。

Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

由于 Cookie 是将用户信息保存在用户本地,是不安全的,所以更多的时候使用 Sessioin来保存用户的状态信息.

1. Session的工作机制

Session 为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。

UID 存储在 cookie 中,或者通过 URL 进行传导。

也就是说 Session 是基于 Cookie 实现的.

2. Session 特点:

1、用户访问网站时,由服务器自动创建

2、用户离开网站时,由服务器自动销毁

3、访问网站的每个用户,都有一个独立的 Session

4、Session 只能存储单一用户信息

5、Session 中存储的信息,在网站所有页面均可访问

6、Session 以文本文件的形式,存储在服务器端,默认是在服务器的临时目录里

3. 开启 Session 会话

Session 在使用之前必须先开启,在 PHP 中,可以通过 session_start() 函数开启 Session。

或者在 PHP的配置文件中配置自动开启。

注意:session_start() 函数必须位于 标签之前,在 session_start() 函数之前,不能有任何形式的输出。

<?php
    header("content-type:text/html;charset=utf-8");
    // 开启session会话
  session_start();
    // 将session id 发送给客户端显示
  echo session_id();
?>

4. 设置Session 信息

通过预定义变量 $_SESSION,实现 Session 的存值。

$_SESSION$_GET, $_POST,$_COOKIE相同,也是一个超全局变量,并且是一个数组.

可以通过 访问 $_SESSION 使用下标形式进行设置 session 信息.

$_SESSION["key"] = "value";
<?php
    header("content-type:text/html;charset=utf-8");
    // 开启session会话
  session_start();
    // 设置信息
    $_SESSION["username"] ="tom";
    // 如果有多个信息,需要单独设置
  $_SESSION["passwd"] = "123";
?>

注意:Session 中可以存储任意类型的数据。服务器会将数据进行序列化后,保存到文件中.

5. 获取Session 信息

通过下标的方式获取 Session 信息

$value = $_SESSION["key"];
<?php
    session_start();

    // 获取Session信息
    $username = $_SESSION["username"];
    $passwd = $_SESSION["passwd"];
?>

6. 销毁Session 信息

Session 在PHP的生存周期默认是 1440秒, 也就是24分钟.

也可以通过 unset() 或 session_distory() 方法手动销毁 Session 信息

<?php
    session_start();
    // 销毁指定session 信息
    unset($_SESSION["key"];
    // 销毁当前用户全部 Session 信息
    session_distory();
 ?>

7. 完整示例

  • 表单页面 test.php

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <meta charset="UTF-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Document</title>
    </head>
    <body>
     <!-- HTML 页面中的表单,用来收集数据,并发送给服务器的test.php接口进行处理 -->
     <form action="login.php" method="GET">
         <p>姓名: <input type="text" name="username" id="n"></p>
         <p>密码: <input type="password" name="passwd" id="p"></p>
         <p><input type="submit" value="提交"></p>
     </form>
    </body>
    </html>
    
  • 设置Session页面 t1set.php

    <?php
     // 向客户端发送响应头信息
     header("Content-Type:text/html;charset=utf-8");
     // 开启session会话
     session_start();
    
     // 获取客户端提交的查询参数数据
     $username = $_GET["username"];
     $passwd = $_GET["passwd"];
     // 判断表单是否正确提交了数据
     if(isset($username) && isset($passwd)){
         $_SESSION["username"] = $username;
         $_SESSION["passwd"] = $passwd;
         echo "登陆成功,并设置Session, SID: " . session_id();
    
     }else{
         echo "用户名或密码不正确";
     }
     echo '<br>';
     echo ' <p><a href="t2get.php">获取查看Session信息</a></p>';
    ?>
    
  • 获取Session页面

    <?php
     session_start();
    
     // 获取Session信息
     $username = $_SESSION["username"];
     $passwd = $_SESSION["passwd"];
    
     if(isset($username) && isset($passwd)){
         echo "获取Session成功";
         echo '<br>';
         echo "UserName:" . $_SESSION["username"];
         echo '<br>';
         echo "Passwd:" . $_SESSION["passwd"];
         echo '<br>';
         echo '<p><a href="t3del.php">删除Session信息</a></p>';
     }else{
         if(empty($username)){
             echo "获取Session中 username 失败";
         }
         if(empty($passwd)){
             echo "获取Session中 passwd 失败";
         }    
     }
    ?>
    
  • 删除Session页面

    <?php
     // 开启 session
     session_start();
     // 删除所有的Session 信息
     // session_destroy();
     // 删除单个 session 会话信息
     unset($_SESSION["passwd"]);
     echo "删除Session成功";
     echo '<br>';
     echo '<p><a href="t2get.php">获取Session信息</a></p>';
    ?>
    

四. 用户注册登陆案例

index.html

<?php
  //当退出回跳回首页时,删除cookie信息
  if(isset($_GET['logout'])){
    if($_GET['logout'] == 1){
      setcookie('username',"");
      setcookie('password',"");
    }
  }
?>

<!DOCTYPE html>
<html>
  <head>
    <title>注册登陆</title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
    <script type="text/javascript">

      $(function(){
        // 绑定事件,让键盘按下时,也就是有输入时,让提示文字隐藏
        $('#username').keydown(function(){
          $("#nameSpan").hide();
        });
        $('#password').keydown(function(){
          $("#pwdSpan").hide();
        });
      });
        //登陆验证
        function login(){
            // 先让所有的提示文字隐藏
            $("#nameSpan").hide();
                $("#pwdSpan").hide();

            // 如果输入内容为空,则显示提示文字,并聚焦到该输入框让用户输入
            if($("#username").val() == ""){
                $("#nameSpan").show();
                $("#username").focus();
                return false;
            }
            else if($("#password").val() == ""){
                $("#pwdSpan").show();
                $("#password").focus();
                return false;
            }
        }

    </script>
    <style>
      *{
        margin: 0;
      }
      body{
        background: #f2f2f2;
      }
      #content{
        width: 1200px;
        margin: 0 auto;
        text-align: center;
      }

      .bg{
        width: 350px;
        margin: 200px auto;
        border: 1px solid #ccc;
        text-align: left;
      }
      .redSpan{
        font-size: 12px;
        color:red;
      }
    </style>
  </head>
  <body>
    <div id='content'>
        <!-- 登陆表单 -->
      <form name="login_form" method="get" action="login.php" onsubmit="return login()">
        <div class="bg">
          <h1>用户登陆</h1>
          <div class="login">
            <div class="login_items1">
              <span>登陆名称:</span>
              <span><input type="text" id="username" name="username"/></span>
              <span id="nameSpan" class='redSpan' style="display: none;">姓名不能为空</span>
            </div>
            <div class="login_items2">
              <span>登陆密码:</span>
              <span><input type="password" id="password" name="password"/></span>
              <span id="pwdSpan" class='redSpan' style="display: none;">密码不能为空</span>
            </div>
            <div class="login_items3">
              <!-- 跳转到注册页面 -->
              <span>没有帐号?</span><a href="register.php" >去注册&raquo;</a>  
            </div>
            <div class="login_items4">
              <input type="submit" value="登陆"  />
            </div>
          </div>
        </div>
      </form>
    </div>    
  </body>
</html>

Login.php

<?php
  // 判断登陆用户名是否存在,如果存在,全部取出
  if(isset($_GET['username'])){
    $username = $_GET['username'];
    $password = $_GET['password'];
    // 连接数据库
    $url = "mysql:host=localhost;dbname=test";
    $user = 'root';
    $pwd = '';
    $db = new PDO($url, $user, $pwd);

    // 根据登陆的用户名在数据库查询,方式二,查询表单提交用户名,依次判断,效率较高
    $loginUser = $db->query("select * from user where name='{$username}'")->fetch(PDO::FETCH_ASSOC);
    // 如果返回值为false,说明没有该用户名对应的记录,否则结果是该用户的数组信息
    if($loginUser != false){
      // 比较密码是否相同
      if(strcmp($loginUser['password'],$password) == 0){
        // 如果密码正确,设置cookie信息
        setcookie("username", $username);
        setcookie('password', $password);
        // 提示后跳转到详情页面
        echo "<script>alert('恭喜登陆成功!');window.location='detile.php';</script>";
      }else{
        // 提示密码不正确,回跳到首页重新登陆
        echo "<script>alert('用户密码不正确'); window.location='index.php';</script>";
      }
    }else{
      // 提示用户不存在,回跳到首页重新登陆
      echo "<script>alert('用户不存在'); window.location='index.php';</script>";
    }

  }
?>

Register.php

<?php
  // 判断是否有正确提交过来数据,如果有,则提取所有的数据
  if(isset($_POST["username"])){
    $user = $_POST['username'];
    $passwd = $_POST['password'];
    $tel = $_POST['tel'];

    // 连接数据库
    $url = "mysql:host=localhost;dbname=test";
    $u = 'root';
    $pwd = '';
    $db = new PDO($url, $u, $pwd);

    // 获取所有的用户, 方式一,查询所有用户,依次判断,效率较低
    $sql = "select * from user";
    $users = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);

    // 判断用户名是否存在
    $isExists = false;
    foreach($users as $uu){
      if(strcasecmp($user, $uu['name']) == 0){
        // 如果存在,设置标记,并结束判断
        $isExists = true;
        break;
      }
    }

    // 根据标记状态决定是否注册
    if($isExists){
      // 如果用户名存在,重新跳转回注册页面
      echo "<script>alert('用户名已存在!');window.location='register.php';</script>";
    }else{
      // 如果不存在,则插入新用户数据到数据库
      $sql = "insert into user(name,password,phone) values('{$user}','{$passwd}','{$tel}')";
      echo $sql;
      $ret = $db->exec($sql);
      if($ret > 0){
        // 设置cookie信息
        setcookie("username", $user);
        setcookie('password', $passwd);
        // 注册成功后,跳转到详情页面
        echo "<script>alert('恭喜注册成功!');window.location='detile.php';</script>";
      }
    }
  }

?>

<!DOCTYPE html>
<html>
  <head>
    <title>注册登陆</title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
    <script type="text/javascript">

      $(function(){
        // 绑定事件,让键盘按下时,也就是有输入时,让提示文字隐藏
        $('#username').keydown(function(){
          $("#nameSpan").hide();
        });
        $('#password').keydown(function(){
          $("#pwdSpan").hide();
        });
        $('#password2').keydown(function(){
          $("#pwdSpan2").hide();
        });
        $('#tel').keydown(function(){
          $("#telSpan").hide();
        });
      });
        //登陆验证
        function register(){
          $("#nameSpan").hide();
          $("#pwdSpan").hide();
          $("#pwdSpan2").hide();
          $("#telSpan").hide();

           if($("#username").val() == ""){
                $("#nameSpan").show();
                $("#username").focus();
                return false;
            }
            else if($("#password").val() == ""){
                $("#pwdSpan").show();
                $("#password").focus();
                return false;
            } 
            else if($("#password").val() != $("#password2").val()){
              $("#pwdSpan2").show();
              $("#password2").focus();
              return false;
            }
            else if($("#tel").val() == ""){
              $("#telSpan").show();
              $("#tel").focus();
              return false;
            }
        }

    </script>
    <style>
      *{
        margin: 0;
      }
      body{
        background: #f2f2f2;
      }
      #content{
        width: 1200px;
        margin: 0 auto;
        text-align: center;
      }

      .bg{
        width: 350px;
        margin: 200px auto;
        border: 1px solid #ccc;
        text-align: left;
      }
      .redSpan{
        font-size: 12px;
        color:red;
      }
    </style>
  </head>
  <body>
    <div id='content'>
        <!-- 登陆表单 -->
      <form name="login_form" method="post" action="register.php" onsubmit="return register()">
        <div class="bg">
          <h1>用户登陆</h1>
          <div class="login">
            <div class="login_items1">
              <span>用户名:</span>
              <span><input type="text" id="username" name="username"/></span>
              <span id="nameSpan" class='redSpan' style="display: none;">姓名不能为空</span>
            </div>
            <div class="login_items2">
              <span>密码一:</span>
              <span><input type="password" id="password" name="password"/></span>
              <span id="pwdSpan" class='redSpan' style="display: none;">密码不能为空</span>
            </div>
            <div class="login_items3">
              <span>密码二:</span>
              <span><input type="password" id="password2" name="password2"/></span>
              <span id="pwdSpan2" class='redSpan' style="display: none;">二次密码不一致</span>
            </div>
            <div class="login_items4">
              <span>手机号:</span>
              <span><input type="text" id="tel" name="tel"/></span>
              <span id="telSpan" class='redSpan' style="display: none;">手机号不能为空</span>
            </div>
            <div class="login_items5">
              <input type="submit" value="注册"  />
              <a href="index.php"><input type="button" value="取消"  /></a>

            </div>
          </div>
        </div>
      </form>
    </div>


  </body>
</html>

detile.php

<?php
    // 因为在登陆成功和注册成功后,都设置了cookie信息,在详细页中获取cookie信息,在下面进行展示
    $user = $_COOKIE["username"];    
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>欢迎 <?php echo $user; ?> 回来</p>

    <p><a href="index.php?logout=1">退出登陆</a></p>
</body>
</html>