(九)php参考手册---http函数&表单与验证&会话处理

本文详细介绍了PHP中的HTTP函数,包括header()、http_response_code()等,以及如何处理表单数据的接收和验证,如使用isset()、empty()和正则表达式。此外,还讲解了会话管理中的cookie和session,强调了它们的使用注意事项和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

header()函数

  • header(string,replace) 向客户端发送原始的 HTTP 报头。
    参数:string 必需。规定要发送的报头字符串。
    replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。默认是 true(替换)。false(允许相同类型的多个报头)。
<?php
    header('Location:Demo2.php');
    // 自动跳转到想要的页面
    header('Location:http://www.baidu.com');
    // 自动跳转到百度
?>

注意:如果出现警告:Cannot modeify header information-headers already sent by(—)in —。
解决办法一:在执行header()函数之前不能有任何浏览器输出
解决办法二:开启缓冲 ob_start() (不建议使用)
http_response_code 可选。把 HTTP 响应代码强制为指定的值。(PHP 4 以及更高版本可用)
headers_list() 返回已发送的(或待发送的)响应头部的一个列表。
headers_sent() 检查 HTTP 报头是否发送/已发送到何处。
setcookie() 定义与 HTTP 报头的其余部分一共发送的 cookie。
setrawcookie() 定义与 HTTP 报头的其余部分一共发送的 cookie(不进行 URL 编码)。

<?php
    header('Content-Type:text/html;charset=utf-8');
    echo '我是中文';
?>

接受及验证数据

超级全局变量
  • $_POST接收post提交的数据
  • $_GET 接收get提交的数据
验证数据
  • isset($_POST(’name’)) 判断一个变量是否存在
  • empty()判断是否为空

<?php
    //过滤非表单提交
    if(isset($_POST['name'])){
        echo '正常提交';
    }else{
        echo '非正常提交';
    }
    //判断提交是否为空(不推荐这种方法)
    if(!empty($_POST['name'])){
        echo '为空';
    }else{
        echo '不为空';
    }
?>
  • htmlspecialchars($username):将html特殊字符进行过滤。
<?php
    if(isset($_GET['name'])){
        echo '正常提交';
        $username=$_GET['name'];
        // 在输出之前,为了页面安全性
        $username=htmlspecialchars($username);
    }else{
        echo '非正常提交';
    }
?>
有效性验证
  • trim()去除数据的前后空格
  • strlen()判断数据的长度
  • is_numeric()判断数据是否是纯数字
  • 使用正则表达式验证邮箱是否合法

  • tips:exit;(直接退出)
    die;(不会继续执行)

验证 Name、E-mail、以及 URL
<?php
// 定义变量并设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name is required";
  } else {
    $name = test_input($_POST["name"]);
    // 检查名字是否包含字母和空格
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed"; 
    }
  }

  if (empty($_POST["email"])) {
    $emailErr = "Email is required";
  } else {
    $email = test_input($_POST["email"]);
    // 检查电邮地址语法是否有效
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
      $emailErr = "Invalid email format"; 
    }
  }

  if (empty($_POST["website"])) {
    $website = "";
  } else {
    $website = test_input($_POST["website"]);
    // 检查 URL 地址语言是否有效(此正则表达式同样允许 URL 中的下划线)
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
    =~_|]/i",$website)) {
      $websiteErr = "Invalid URL"; 
    }
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender is required";
  } else {
    $gender = test_input($_POST["gender"]);
  }
}
?>

其他http函数

  • headers_list() 函数返回已发送的(或待发送的)响应头部的一个列表。
    该函数返回包含报头的数组。

  • headers_sent(file,line):函数检查 HTTP 标头是否已被发送以及在哪里被发送。
    如果报头已发送,则返回 true,否则返回 false。
    参数:file,line 可选。如果设置 file 和 line 参数,headers_sent() 会把输出开始的 PHP 源文件名和行号存入 file 和 line 变量中。

会话处理

会话结束时,当浏览器关闭时,cookie就没有了。
如果创建的是一个包含过期时间的cookie,过期时间采用当前的时间戳+秒即可

time()+(7*24*60*60)  //表示未来7
  • setcookie(name,value,expire,path,domain,secure):函数向客户端发送一个 HTTP cookie。
    参数:
    name 必需。规定 cookie 的名称。
    value 必需。规定 cookie 的值。
    expire 可选。规定 cookie 的有效期。
    path 可选。规定 cookie 的服务器路径。
    domain 可选。规定 cookie 的域名。
    secure 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
    注释:可以通过 HTTPCOOKIEVARS["user"]_COOKIE[“user”] 来访问名为 “user” 的 cookie 的值。

  • setrawcookie() 与 setcookie() 几乎完全相同,不同的是不会在发往客户机时,对 cookie 值进行自动 URL 编码。
    注释:setrawcookie() 与 setcookie() 几乎完全相同,不同的是不会在发往客户机时,对 cookie 值进行自动 URL 编码。

  • 删除cookie需要把原来的name的值替换成空。或者将过期时间调整到比目前的时间还早一秒。

注意:cookie并不是及时生成的,会慢一拍。第一次刷新只是覆盖了原来,但获取的还是之前的,需要第二次刷新,才能真正获取到。
  • cookie的限制:1:必须在HTML文件的内容输出之前设置
    2:不同浏览器对cookie的处理不一致,且有时会出现错误结果
    3:限制是在客户端的,一个浏览器能创建最多30个,并且不能超过4kb,
    每个站点能设置最多20个。
session

只要用到session,就必需开启session_start();session是存在服务器端的,一般存放1440秒,
如果网页没有任何操作,会自动销毁,当然通过php.ini去修改保存时间
如果关闭了浏览器,也会自动销毁,并且没有延迟性

  • 创建session,直接采用超级全局变量赋值即可
//赋值
$_SESSION['name']='123';
//取值
echo $_SESSION['name'];
//删除
unset($_SESSION['name']);
echo $_SESSION['name'];
//销毁所有session
session_destroy();

总结

cookie适用于会员登录,购物车等等,因为不占用服务器资源,所以会员特别多的,就用cookie
session一般用于后台管理登录,人少,安全性高,一段时间不操作会自动过期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值