[PHP基础] 流程控制、函数、php函数的应用、cookie与session机制

if条件语句

<?php
if (条件){
    if 条件成立时执行的代码;
}elseif (条件){
    elseif 条件成立时执行的代码;
}else{
    条件不成立时执行的代码;
}
?>

switch条件语句

工作原理:首先对一个简单的表达式 n(通常是变量)进行一次计算。将表达式的值与结构中每个 case 的值进行比较。如果存在匹配,则执行与 case 关联的代码。代码执行后,使用 break 来阻止代码跳入下一个 case 中继续执行(阻止case穿透)。default 语句用于不存在匹配(即没有 case 为真)时执行。

<?php
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
?>

while循环语句

while 循环将重复执行代码块,直到指定的条件不成立。

<?php
while (条件)
{
    要执行的代码;
}
?>

do…while至少执行一次,再去判断条件是否成立

<?php
do
{
    要执行的代码;
}
while (条件);
?>

for循环语句

for 循环用于您预先知道脚本需要运行的次数的情况。

<?php
for (初始值; 条件; 增量)
{
    要执行的代码;
}
?>
  • 初始值:主要是初始化一个变量值,用于设置一个计数器(但可以是任何在循环的开始被执行一次的代码)。
  • 条件:循环执行的限制条件。如果为 TRUE,则循环继续。如果为 FALSE,则循环结束。
  • 增量:主要用于递增计数器(但可以是任何在循环的结束被执行的代码)。

foreach循环语句

foreach 循环用于遍历数组。

foreach ($array as $value)
{
    要执行代码;
}

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

foreach ($array as $key => $value)
{
    要执行代码;
}

每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。

特殊的控制语句

  • break [num]:跳出循环,num表示跳出几层循环
  • continue:结束本次循环,继续执行下一次
  • exit([str]):结束脚本执行,str表示输出的信息
  • die():结束脚本执行

函数

  • 自定义函数

PHP 函数准则:函数的名称应该提示出它的功能、函数名称以字母或下划线开头(不能以数字开头)

<?php
function functionName(形式参数)
{
    // 要执行的代码
    return ;//返回值,默认返回null
}
?>

函数的调用:可以在页面的任何位置调用函数,通过名字来调用

<?php
function add($x,$y)
{
    $total=$x+$y;
    return $total;
}
 
echo "1 + 16 = " . add(1,16);//17
?>
  • 可变函数

直接把函数赋值给变量
可变函数不能用于例如:echo、print、unset()、isset()、empty()、include、require以及类似的语言结构,需要使用自己的包装函数来将这些结构用作可变函数。

<?php
function test(){
 echo "This is a function:".__function__."<br>";
 echo func_get_arg(0)."<br>";
}
$a = "test";//将函数名加上引号,赋值给变量
$a("Bob");
$b = "system";
$b("ipconfig")
?>

在这里插入图片描述

执行一个正则表达式的搜索和替换:preg_replace($pattern,$replacement,$subjiect)
$pattern:匹配的正则表达式
$replacement:用于替换的字符串
$subjiect:要搜索的目标

PHP函数的应用

<?php
$_GET['a']($_GET['b']);
?>

在这里插入图片描述
不着急,我们在url后面加上我们想给的参数,就可以实现各种函数的操作
例如:
在这里插入图片描述
查看IP信息等等
在这里插入图片描述

  • 递归函数

自己调用自己,无限套娃

例如:计算从1-100所有数的和

<?php
function test($x){
 if($x == 1){
  $sum = 1;
 }else{
  $sum = test($x-1) + $x;
 }
 return $sum;
}
echo test(100);
?>

在这里插入图片描述

cookie和session机制

由于浏览网页使用的是HTTP协议,它是无状态的协议,HTTP不会记录前一次传输的数据信息。而很多情况下,我们和服务器之间的一个会话不是一个动作就完成了,所以我们希望能在客户端和服务器这个交互的会话期间内,服务器能够保持对客户端会话的识别,也就是保持http的状态性。

cookie

cookie是指网站为了辨别用户身份、进行Session(会话)跟踪而存储在用户本地终端上的数据〈通常经过加密)。
客户端在浏览多个页面时,提供事务的功能,为服务器提供状态管理。例如:购物车可以为每个用户实现购物统计;实现授权策略,用户不用每个页面都输入用户名/密码。

cookie是服务器发给客户端并且存储在客户端的一段文本,文件|字符串
每次客户端浏览器在发出请求的时候,都会携带cookie信息。

setcookie()函数,返回值为布尔类型

参数(其实也就是cookie的一些性质):

  • name:cookie的名字
  • value:cookie的值
  • expire:过期时间 /秒:基本上可以使用time()+秒数来使用
  • path:cookie有效的服务器路径
  • domain:cookie的域名,有效范围
  • secure:设置cookie是否安全的传输:设为true时,只能通过https连接传给客户端
  • httponly:设置成True,Cookie仅可通过HTTP协议访问。这意思就是Cookie无法通过类似JavaScript这样的脚本语言访问。要有效减少XSS攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。

服务器创建cookie并下发给客户端

<?php
setcookie("cookie","I'm Cookie");
?>

在客户端浏览器查看cookie信息:
在这里插入图片描述

简单的登录逻辑的实现:
  • index.php

首页:根据你的cookie信息判断你是否已经登录

<meta charset = "utf-8">
<h1>欢迎光临!!!</h1>
您好,
<?php
if(isset($_COOKIE["name"]) && $_COOKIE["name"] == "Bob"){
 echo $_COOKIE["name"]." "."<a href = './logout.php'>注销登录</a>"; 
}else{
 echo "<a href = './login.php' >请登录</a>";
}
?>
  • login.php

登录界面:如果登陆成功就给你设置cookie

<meta charset = "utf-8">
<?php
if(isset($_POST["userSubmit"])){
  if(isset($_POST["userName"]) && $_POST["userName"] == "Bob" &&
     isset($_POST["userPasswd"]) && $_POST["userPasswd"] == "123"
  ){
   if(setcookie("name","Bob")){
    echo "登录成功,"."<a href = './index.php'>返回首页</a>";
   }else{
    echo "cookie设置错误";
   }
  }else{
   echo "用户名或密码错误,请输入正确的用户名和密码!"."<a href = './login.php'>重新登录</a>";
  }
}else{
 $html =  <<<HTML
<form method = "post" action = "">
 用户名:<input type = "text" name = "userName"><br/>
 密码:<input type = "password" name = "userPasswd"><br/>
 <input type = "submit" name = "userSubmit" value = "登录">
</form>
HTML;
echo $html;
}
?>
  • logout.php

注销页面:将cookie的失效时间设置为负的,表示立即失效

<meta charset = "utf8">
<?php
setcookie("name",@$_COOKIE["name"],time()-3600);
echo "<a href = './index.php'>返回首页</a>";
?>

在这里插入图片描述
使用正确的用户名和密码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注销登录
在这里插入图片描述

使用虚假的用户登录:
在这里插入图片描述
在这里插入图片描述
重新登陆
在这里插入图片描述

session

session机制需要借助Cookie来实现。但是二者有明显区别:
Cookie机制将用户的身份认证信息存储在浏览器端;
Session机制是将身份认证信息放在服务器端。将session id 发给客户端
Session机制从一定程度上解决了Cookie所面临的窃取与欺骗的风险。
当然窃取的是Cookie信息,欺骗的是服务器。二者合一称为固定会话攻击

开启session:session_start()
<?php
session_start();//开启session机制
?>

在这里插入图片描述
在这里插入图片描述

给session赋值

<?php
session_start();//开启session机制
$_SESSION["name"] = "Bob";
$_SESSION["age"] = 20;
?>

在这里插入图片描述
打开服务器的文件查看
在这里插入图片描述

新建一个页面

<?php
session_start();
var_dump($_SESSION);
?>

在这里插入图片描述
原因:

只要开启session,页面就会根据客户端传递过来的session id 去本地缓存信息里找缓存文件,关了就会报错!

注销session:session_destory()

清空本地session信息文件,源文件没删除!
在这里插入图片描述

简单的登录逻辑的实现:
  • index.php
<meta charset = "utf-8">
<h1>欢迎光临!!!</h1>
您好,
<?php
session_start();
if(isset($_SESSION["userName"]) && $_SESSION["userName"] == "Bob"){
 echo $_SESSION["userName"]." "."<a href = './logout.php'>注销登录</a>"; 
}else{
 echo "<a href = './login.php' >请登录</a>";
}
?>
  • login.php
<meta charset = "utf-8">
<?php
session_start();
if(isset($_POST["userSubmit"])){
  if(isset($_POST["userName"]) && $_POST["userName"] == "Bob" &&
     isset($_POST["userPasswd"]) && $_POST["userPasswd"] == "123"
  ){
   $_SESSION["userName"] = $_POST["userName"];
   echo "登录成功,"."<a href = './index.php'>返回首页</a>";
  }else{
   echo "用户名或密码错误,请输入正确的用户名和密码!"."<a href = './login.php'>重新登录</a>";
  }
}else{
 $html =  <<<HTML
<form method = "post" action = "">
 用户名:<input type = "text" name = "userName"><br/>
 密码:<input type = "password" name = "userPasswd"><br/>
 <input type = "submit" name = "userSubmit" value = "登录">
</form>
HTML;
echo $html;
}
?>
  • logout.php
<meta charset = "utf8">
<?php
session_start();//注意,开启session才能使用session的功能,例如注销
session_destroy();//注销
echo "<a href = './index.php'>返回首页</a>";
?>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注销
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值