php 快速入门(六)

发布于:2024-03-28 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、前后台交互

1.1 $_GET

用来获取浏览器通过GET方法提交的数据

GET方法它是通过把参数数据加在提交表单的action属性所指的URL中,值和表单内每个字段一一对应,然后在URL中可以看到,但是有如下缺点

1. 安全性不好,在URL中可以看得到
2. 传送数据量较小,不能大于2KB

1.2 $_POST

用来获取浏览器通过POST方法提交的数据。

POST方法它是通过HTTP POST机制,将表单的各个字段放置在HTTP HEADER内一起传送到action属性所指的URL地址中,用户看不到这个过程。

他提交的大小一般来说不受限制,但是具体根据服务器的不同,还是略有不同。相对于GET方式安全性略高。

1.3 $_REQUEST

php中$_REQUEST可以获取以POST方法和GET方法提交的数据,但是速度比较慢

REQUEST["参数”]具有POST["参数"] GET["参数"]的功能,但是REQUEST["参数"]比较慢

通过post和get方法提交的所有数据都可以通过$_REQUEST数组["参数"]获得

案例:

<?php
    header("Content-type:text/html;charset=utf-8");

    $arg1 = $_REQUEST["username"];
    $arg2 = $_REQUEST["password"];
    
    echo "第一个参数是$arg1<br>";
    echo "第二个参数是$arg2<br>";
?>

1.4 $_SERVER

$_SERVER 收到的数据,上一个数组类型的数据

数组中的元素,是基于关键字的方式进行索引

HTTP_HOST:客户端访问的域名
HTTP_USER_AGENT:客户端的浏览器
QUERY_STRINT:客户端传递的参数列表
REMOTE_ADDR:客户端的ip地址
SERVER_POST:服务器的端口号
SERVER_ADDR:服务端的地址
REQUEST_METHOD:客户端发生请求的方法:post和get
HTTP_REFERER:记录是从哪个页面跳转过来的

案例:

<?php    
    header("Content-type:text/html;charset=utf-8");
    
    $arg1 = $_REQUEST["username"];
    $arg2 = $_REQUEST["password"];
    
    echo "第一个参数是$arg1<br>";
    echo "第二个参数是$arg2<br>";

    echo $_SERVER['SERVER_ADDR'];
    echo "<br>";
    echo $_SERVER['QUERY_STRING'];
    echo "<hr>";
?>

二、会话保持

2.1 session简介

http协议的特定

http协议是一个无状态的协议
无状态导致的问题:浏览器/服务器端无法记录客户端的登录状态

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

Session 用法说明

通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。会话通常被用来在多个页面请求之间保存及共享信息。一般来说,会话 ID 通过 Cookie 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。如果请求中不包含会话ID信息,那么 PHP 就会创建一个新的会话,并为新创建的会话分配新的 ID。

会话的工作流程很简单。当开始一个会话时,PHP 会尝试从请求中查找会话 ID(通常通过会话Cookie),如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话。会话开始之后,PHP 就会将会话中的数据设置到 $_SESSION 变量中。当 PHP 停止的时候,它会自动读取 $_SESSION 中的内容,并将其进行序列化,然后发送给回话保存处理程序来进行保存。

默认情况下,PHP使用内置的文件会话保存处理程序(files)来完成会话的保存。也可以通过配置项session.save_handler 来修改所要采用的会话保存处理程序。对于文件会话保存处理程序,会将会话数据保存到配置项 session.save_path 所指定的位置。

可以通过调用函数 session start() 来手动开始一个会话。如果配置项 session.auto start 设置为1,那么请求开始的时候,会话会自动开始。

PHP脚本执行完成之后,会话会自动关闭。同时,也可以通过调用函数 session write close() 来手动关闭回话。

2.2 session应用

在PHP中$_SESSION 的使用方法

  • 使用PHP应用session时,将session中的数据存储在服务器上,然后通过客户端传来的sessionID识别客户端的信息,并提取信息。

php中的session的常用操作:

session的写入、读取、注册与删除。

1. session 的开始

在您把用户信息存储到PHP session 中之前,首先必须启动回话。

注释:session_start() 函数必须位于标签之前:

<?php session_start(); ?>

<html>
    <body>

    </body>
</html>

这个代码会向服务器注册用户的会话,以便您开始保存用户信息,同时会为用户会话分配一个UID。

2. 存储 Session 变量

存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

<?php
    session_start();
    //存储 session 数据
    $_SESSION['views']=1;
?>

<html>
    <head>
        <meta charset='utf-8'>
        <title>xxxxxx</title>
    </head>
    
    <body>
        <?php
            //检索 session 数据
            echo "浏览量:".$_SESSION['views'];
        ?>
    </body>
</html>

在下面的实例中,我们创建了一个简单的 page-view 计数器。isset()函数检测是否已设置“views”变量。如果已设置“views”变量,我们累加计数器。如果“views”不存在,则创建“views”变量,并把它设置为1:

<?php
    session_start();
    
    if(isset($_SESSION['views']))
    {
        $_SESSION['views']=$_SESSION['views']+1;
    } else {
        $_SESSION['views']=1;
    }
    
    echo "浏览量:".$_SESSION['views'];
?>

销毁 Session

如果您希望删除某些Session数据,可以使用 unset() 或 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量:

<?php
    session_start();
    if(isset($_SESSION['views']))
    {
        unset($_SESSION['views']);
    }
?>

也可以通过调用 session_destroy() 函数彻底销毁 session:

<?php
    session_destroy();
?>

2.3 Session登录认证

实现效果

  • index.html:前台登录页面
  • login.php:检查用户密码是否正确
  • msg.php:登录成功后显示的页面
  • logout.php:实现退出登录的文件

1. index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<table align="center" cellpadding="0" cellspacing="0" width="800px" height="100px" border="1px">
    <tr>
        <td width="50%" align="center">
        
          <from action=login.php method="get">
            账号:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            <input type="submit" value="get提交数据">
          </form>
        </td>
        <td width="50%" align="center">
          <form action="login.php" method="post">
            账号:<input type="text" name="username"><br>
            密码:<input type="password" name="password"><br>
            <input type="submit" value="post提交数据">
          </from>
        </td>
     </tr>

</table>
</body>
</htmll>

2. login.php

<?php
    header("Content-type:text/html;charset=utf-8");

    session_start();    //启动Session回话

    // 判断用户的请求方法是否为post,如果是post方法,则为真
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        
        //为了防止全局变量的干扰,为了安全
        //当下面的判断 登录成功的情况下,才会将这个值改为true
        $_SESSION['loggedin'] = false;

        //判断前端传入的账号和密码是否正确
        if ($_POST['username'] === "root" && $_PSOT['password'] === '123') {
            //如果用户密码是root和123,则登录成功
            //如果登录成功,那么就记录用户的session信息
            $_SESSION['loggedin'] = true;
            $_SESSION['username'] = $_POST['username'];
    
            echo "登录成功";
    
            //跳转到后台页面
            header("location:msg.php");
        } else {
            echo "登录失败,5s后返回登录登录页面";
            header("refresh:5;url=http://www.php001.com/index.html");
        }
    }
    else  //如果客户端的请求方法不是post,则为假
    {
        echo "请求方法错误,必须为:POST";
    }
?>

3. msg.php

<?php
    header("Content-type:text/html;charset=utf-8");
    session_start();    //启动回话

    // isset() 检查变量是否被定义了,如果已经被定义了,则为真
    if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
        echo "欢迎,".$_SESSION['username']."!<br>";
        echo "这是后台页面<br><br>";

        // 添加退出按钮
        echo '<form action="logout.php" method="POST"> 
                <input type="submit" value="退出登录">
              </form>';
     // 如果还没登录,那么就为假
    } else {
        echo "请先登录";
        // 跳转到登录页面
        echo "5s后返回登录页面";
        header("refresh:5;url=http://www.php001.com/index.html");
        exit;
    }
?>

4. logout.php

<?php
    session_start();    //启动回话
    
    // 判断是否已经登录
    if ($_SERVER['HTTP_REFFERER'] === "http://www.php001.com/msg.php")
    {
        //销毁会话
        session_unset();
        session_destroy();

        // 重定向回登录页
        header("Location:index.html");
    }
    else
    {
        // 重定向回登录页面
        header("Location:index.html");
    }
?>
本文含有隐藏内容,请 开通VIP 后查看