精华内容
下载资源
问答
  • 在 Stack Overflow 提过这个问题,很快就被网友解答了,非常感谢,有兴趣的朋友可以去瞧瞧我的渣英文。How to validate the user JWT pass over Token is correct ...当我们在实际使用,会在接口中传入 To...

    在 Stack Overflow 提过这个问题,很快就被网友解答了,非常感谢,有兴趣的朋友可以去瞧瞧我的渣英文。How to validate the user JWT pass over Token is correct

    当然,打不开还是看本文吧,hh(耸肩)
    

    根据 lcobucci/jwt 官网 Wiki,我们成功创建了一个 Token

    当我们在实际使用时,会在接口中传入 Token 以获得授权来继续操作,但是我们需要考虑一些额外的场景

    就是非法 Token。

    例如接口地址是这样的:http://example.org?token=123.123.123(真实 Token 经过 base64 编码并且中间有两个 .

    当 Token 并未经过 base64 编码时,如果按照这个 JWT 库执行:

    $token = (new Parser())->parse((string) $token);
    

    将会得到一个异常:

    异常

    先来吐槽一下自己…我一直在想怎么处理这玩意儿(完全忘记了捕获异常这个事儿)

    于是我弄了一个解决方案:(base64 解码后再拼装成 Json 字符串,就能得到 JWT 头,以此用来验证)

    // $token from a HTTP request.
    // Must have 2 dots.
    if (substr_count($token, '.') === 2) {
        $preValidToken = base64_decode($token);
        // Get decoded token's last '}' position.
        $lastPos = strrpos($preValidToken, '}');
        if ($lastPos) {
            // Assemble Json string.
            $preValidToken = '[' . substr($preValidToken, 0, $lastPos + 1) . ']';
            $preValidToken = str_replace('}{', '},{', $preValidToken);
            // Convert to associative array.
            $preValidToken = json_decode($preValidToken, true);
            if ($preValidToken && is_array($preValidToken)) {
                var_dump($preValidToken);
                die;
                $token = (new Parser())->parse((string) $token);
                // Parses from a string
                // Do something here...
            }
        }
    }
    echo json_encode([
        'code' => 205,
        'msg' => 'Token not valid '
    ]);
    exit();
    

    打印出来结果是这样的:

    array (size=2)
      0 => 
        array (size=3)
          'typ' => string 'JWT' (length=3)
          'alg' => string 'HS256' (length=5)
          'jti' => string '123123123' (length=9)
      1 => 
        array (size=6)
          'iss' => string 'http://example.org' (length=13)
          'jti' => string '123123123' (length=9)
          'iat' => int 1524314239
          'nbf' => int 1524314299
          'exp' => int 1524317839
          'uid' => int 1
    

    最后的正确做法应该如下:

    // 去 TMD 香蕉船异常
    
    // 记得引入 RuntimeException
    try {
        $token = (new Parser())->parse((string) $token);
        // If success, do here
    } catch (RuntimeException $e) {
    	// 也可以把 $e 打印出来,内容略多
        echo json_encode([
            'code' => 205,
            'msg' => 'Token invalid.'
        ]);
        exit();
    }
    

    哎,我现在在反省我自己,怪我 PHP 异常这玩意儿用得少咯?

    展开全文
  • while循环

    千次阅读 2020-01-10 17:19:07
    while循环 while语句用于循环执行程序,执行过程依赖指定条件 语法: while(条件表达式): 语句块 示例 x = 5 count = 1 while(x<=20): print("第%s次循环输出:"%...当x小于等于20,执行while内的...
    • while循环

    while语句用于循环执行程序,执行过程依赖指定条件

    语法:

    while(条件表达式):

             语句块

    示例

    x = 5
    
    count = 1
    
    while(x<=20):
    
        print("第%s次循环输出:"%count,x)
    
        x = x + 5
    
        count = count + 1

    当x小于等于20时,执行while内的语句块,打印x,并且将x的值增加5,第四次循环结束时,x的值为25,不再满足小于等于20,循环终止

    count用于记录循环次数,每次循环后次数增1

    结果输出

    第1次循环输出: 5

    第2次循环输出: 10

    第3次循环输出: 15

    第4次循环输出: 20

     

    • continue语句

    在循环的执行过程中,如果遇到continue语句,将结束本次循环,直接进行下一次循环

    示例

    weekDays = ["Monday","Tuesday","Wednesday","Thursday","Friday"]
    
    count = 0
    
    while(count<len(weekDays)):
    
        print(weekDays[count])
    
        count += 1
    
        continue
    
        print("遇到continue语句,本次循环结束")
    
        print("continue之后的代码不会被执行")

    结果输出

    Monday

    Tuesday

    Wednesday

    Thursday

    Friday

    可以看出continue之后的语句都没有执行

     

    • break语句

    break语句用于停止整个循环的执行

    示例

    weekDays = ["Monday","Tuesday","Wednesday","Thursday","Friday"]
    
    count = 0
    
    while(count<len(weekDays)):
    
        print(weekDays[count])
    
        if(weekDays[count] == "Wednesday"):
    
            print("终止整个循环")
    
            break
    
        count += 1

    结果输出

    Monday

    Tuesday

    Wednesday

    终止整个循环

    当循环执行到第三次的时候,if条件weekDays[2] == "Wednesday"成立,触发break,整个循环结束。

    展开全文
  • while 和 do while的使用及区别

    万次阅读 多人点赞 2018-11-30 10:43:19
    首先介绍while的使用,基本模式 while(循环条件){ 循环操作; } 例 private void testwhile(){ int i = 0; while (i &amp;amp;lt; 5) { i ++; Log.e(TAG, &amp;quot;i = &amp;quot; + ...

    使用

    1. 首先介绍while的使用,基本模式
    while(循环条件){
        循环操作;
    }
    

    private void testwhile(){
            int i = 0;
            while (i < 5) {
                i ++;
                Log.e(TAG, "i = " + i);
            }
        }
    

    输出结果

    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    
    1. do while 的使用,基本模式
    do {
        循环操作
    } while(循环条件);
    

    private void testdowhile(){
            int i = 0;
            do {
                i ++;
                Log.e(TAG, "i = " + i);
            } while (i < 5);
        }
    

    输出结果

    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    

    区别

    从上面的例子看并不能看到哪里有区别,下面再举一个例子,我上传了很多道选择题,系统判断是对还是错,
    这就需要先执行操作再进行条件判断

    do {
        我上传选择题
    } while(系统判断是否正确);
    

    从文字上来描述区别就是

    1. while先判断后执行,do while先执行后判断
    2. 当不满足循环条件时,while循环一次都不会执行,do while循环至少执行一次
    展开全文
  • C语言:while与do while循环语句

    万次阅读 多人点赞 2019-05-05 23:55:29
    while 执行流程:先判断循环控制表达式 Exp_cntrl 的值,当该表达式的值为逻辑真(非 0),会一直执行循环体,直到表达式的值为逻辑假(0)才结束循环。 通常把循环控制表达式 ExP_cntrl 中含有的变量,称为...

    while 

    执行流程:先判断循环控制表达式 Exp_cntrl 的值,当该表达式的值为逻辑真(非 0)时,会一直执行循环体,直到表达式的值为逻辑假(0)才结束循环。
     



    通常把循环控制表达式 ExP_cntrl 中含有的变量,称为循环控制变量。为了避免程序陷入死循环,必须要有能改变循环控制变量的语句,使循环控制表达式 Exp_cntrl 的值趋于逻辑假,以便使循环趋于终止。

    【例 1】统计输出 100 以内的所有奇数之和。

    分析:本题是重复执行“把 100 以内的当前奇数 1、3、5、7,… 累加求和”的相似操作,故采用循环结构。循环算法的关键是要确定循环条件表达式和循环体。

    循环控制变量及初始条件确定:由题意可知,奇数 i 作为循环控制变量,初值为第一个奇数,即 i=1。另外,还有求和变量 sum=0。

    循环条件表达式的确定:循环控制变量 i 为 [1,100] 间的奇数。故循环条件表达式为 i<=100。

    循环体确定:该题循环体中包含以下两部分操作。

    • 把当前奇数变量 i 累加到求和变量 sum 中,即 sum+=i;
    • 为计算当前奇数的下一个奇数做准备,也就是控制变量的增量部分,即 i+=2。



    代码如下:

     #include<stdio.h>

    int main (void){

    int sum=0,i=1; //i初始为第一个素数

    while (i<=100) //循环执行的判断条件

    {

    sum+=i;

    i+=2; //控制变量的增量

    }

    printf("sum=%d\n",sum);

    return 0;

    }

    运行结果为:
    sum=2500

    需要说明的是,必须在零的基础上进行累加,故 sum 需要初始化为 0,否则将是无意义的随机值。循环控制条件不必刻意去思考最后一个奇数是否包含 100,让程序根据奇数的定义及相邻奇数的差值自行计算确定 100 以内的最后一个奇数。

    do-while循环

    do-while 循环的格式如下。

    do{
        Statement _1;
        Statement _2;
    }while(Exp_cntrl);//分号不可丢

    当循环体为一条简单语句时,可以省略 {},即:

    do
        Simp1e_Statement;//循环体
    while(Exp_cntrl);

    注意,在 do-while 结构中,while 括号后的分号不能丟。

    do-while 循环的执行流程是:首先无条件地执行一次循环体,然后再根据循环控制表达式的值来判断是否继续执行循环体。若为真,则继续执行;若为假,则停止执行,退出 do-while 循环。也就是说,do-while 循环至少执行一次循环体。

    do-while 循环和 while 循环的主要差别是:前者至少执行一次循环体,后者有可能一次也不执行循环体。

    d
    o-while 循环的执行流程图



    do-while 循环主要用在一直进行尝试性的操作,直到满足条件为止的情景。

    【例 2】编程实现猜数字游戏,假设谜底为 0〜10 的整数,猜谜者每次输入一个整数,直到猜对为止。

    分析:本题属于先输入所猜数字才能判断是否猜中,如果猜中,游戏结束,如果没猜中,继续猜,直到猜中为止。故该题符合 do-while 循环的使用场景。

    代码如下:

    #include<stdio.h>

    int main (void){

    int pwd=7,gs; //pwd:谜底

    printf ("\tGames Begin\n");

    do{

    printf("Please guess (0~10):");

    scanf("%d",&gs);

    }while(gs!=pwd);

    printf ("\tSucceed!\n");

    printf ("\tGaines over\n");

    return 0;

    }

    运行结果:
            Games Begin
    Please guess (0~10):3
    Please guess (0~10):5
    Please guess (0~10):8
    Please guess (0~10):7
            Succeed!
            Gaines over

    展开全文
  • 过去进行时学习笔记

    千次阅读 2019-07-07 23:42:00
    一、讲故事或小说时做为背景进行描述,做为铺垫,给人以身临其境感觉 二、日常生活描述中用法: 1、长动作用过去进行时,短动作用一般... 4、when和while的区别是:when后可以用一般过去时也可用过去进行时,whi...
  • while&until循环详解

    千次阅读 2018-02-10 19:16:24
    循环语句命令常用于执行一条指令或者一组指令,那么直到条件不在满足停止,在shell脚本中循环语句常见有 while until for select循环语句。 在while循环语句主要用来重复执行一组命令或语句,在企业实际应用中...
  • while循环(包含死循环、while嵌套)

    万次阅读 多人点赞 2019-06-28 17:57:42
    1、while循环 语句格式: while 条件: 条件满足,做的事情1 条件满足,做的事情2 ... 示例及运行结果: 2、while死循环 死循环格式: while True: print('hello python') 示例及运行结果: 3、while...
  • C语言基础:while与do while

    万次阅读 多人点赞 2018-03-14 19:13:30
    在第一章中我们已经简单学习了关于使用while语句来实现循环的操作,现在我们来详细讲述关于while语句的循环方式和do while语句的循环方式。一、whlie循环 while循环语句是C语言中最基本的循环方式,它的语法结构...
  • 先执行循环体,再进行判断 while(a!=0) { cin&amp;gt;&amp;gt;a; cout&amp;lt;&amp;lt;a&amp;lt;&amp;lt;endl; } 改进版 while(true) { cin&amp;gt;&amp;gt;a; ...
  • 新手小白学JAVA 嵌套for循环 while do-while

    万次阅读 多人点赞 2021-04-01 23:14:02
    } 5 拓展 5.1 三种循环的区别 for:知道循环次数 while/do while:当循环次数不确定 while:先判断,不符合规则,不执行代码 do while:代码最少被执行一次,再去判断,符合规则,再次执行代码 循环之间都可以...
  • java while循环_Java while循环

    千次阅读 2020-07-14 03:04:52
    java while循环Java while loop is used to execute a block of statements continuously till the given condition is true. Earlier we looked into java for loop. Java while循环用于连续执行语句块,直到给定...
  • Java while循环

    千次阅读 2019-04-17 17:33:06
    在循环刚开始,会计算一次“布尔表达式”的值,如果条件为真的话就执行循环体。而对于后来每一次额外的循环,都会在开始前重新计算一次。 语句中应有是循环趋向于结束的语句,否则会出现无限循环—“死”循环。 ...
  • 这里对状态的判断使用的是while而不是单线程下常用的if。  以下示例展示了一个简单的生产者-消费者模型:当队列满的时候,阻塞set;当队列为空的时候,阻塞get操作。 public class EventStorage { private ...
  • C语言while循环和do while循环详解

    千次阅读 多人点赞 2020-02-22 11:31:23
    在C语言中,共有三大常用的程序结构: ...所谓循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+……+99+100 的值,就要重复进行99次加法运算。 while循环 while循环的一般形式为: while(表达式)...
  • c语言中while循环

    千次阅读 2019-04-29 15:11:35
    在考查while循环的操作,遵循的原则: 条件测试是在每个循环开始的时候就进入测试,并且这是包含第一个周期的,如果测试第一次的时候就为假,那就不会执行for循环语句里面的东西的。 对条件的测试只在一个循环...
  • sql中的while循环 The SQL While loop is used to repeatedly execute a certain piece of SQL script. SQL While循环用于重复执行某段SQL脚本。 This article covers some of the basic functionalities of...
  • JavaScript中的while和do while循环

    千次阅读 2016-11-30 12:04:26
    While 循环会在指定条件为真循环执行代码块。 如果不设定while循环条件中的变量数值限定的值,则会一直循环。 点击这里 function myfunction() { var x=" ",i=0; while (i { ...
  • 1、Ctrl+Z 只有当Ctrl+Z单独位于一行的行首,表示输入的终止 当Ctrl+Z位于行中、行末,输入都不会结束。... while(cin>>s) cout<<s<<endl; return 0; } 输出: 2、C
  • python中的循环的控制语句有while和for,没有java中的do...while语句。 1.while的使用演示 while的语法格式: while 判断条件: 执行语句1..... 执行语句2..... ..... 循环控制条件 注意1:while的判断条件...
  • python 之while详解

    千次阅读 2020-06-18 21:33:50
    一、while 简介 Python 的循环有 for 和 while ...为 True 运行【语句块】,【语句块】运行结束后,再次进入 <条件表达式>进行 判断,如果 <条件表达式>结果为 True 则再次运行【语句块】, 以此循环直到
  • sql while循环_SQL WHILE循环的简单示例

    千次阅读 2020-07-16 19:53:14
    sql while循环 SQL WHILE loop provides us with the advantage to execute the SQL statement(s) repeatedly until the specified condition result turn out to be false. SQL WHILE循环为我们提供了重复执行...
  • MySQL的while循环

    千次阅读 2020-08-20 00:10:57
    WHILE 语句也是有条件控制的循环语句,当满足条件,执行循环内的语句,否则退出循环。它的基本语法格式如下: WHILE search_condition DO statement list END WHILE [end label] 其中,search_condition 参数...
  • 9. C 语言 -- 循环结构:while语句和 do … while语句

    千次阅读 多人点赞 2018-10-19 19:17:45
    本文主要讲述 C 语言循环结构中的 while 和 do while 语句,并且介绍了 scanf, getchar 和 gets三种输入的使用方法及使用情况。
  • Python中while循环的基本用法

    万次阅读 多人点赞 2019-09-11 10:21:34
    while和for都可以使程序重复执行某一段代码(又称作循环体),区别是for循环用于针对集合中的每一个元素都一个代码块,而while循环在表达式为True的情况下会不断地执行,直到指定条件不满足为止。 今天我们一起来...
  • while、do...while、for循环的使用

    千次阅读 2015-04-01 15:07:51
    class WhileDemo{ public static void main(String[] args){ ... while(条件表达式){ 循环体(执行语句); } int x = 1; while(x<3){ System.out.println("x="+x); x++; } int x = 1; do{ ...
  • Java循环for, while和do...while

    万次阅读 2016-08-21 11:39:11
    可能存在一种情况,当我们需要执行的代码块数次,并且通常...从Java5,增强的for循环中进行了介绍。这主要是用于数组。 while 循环: while循环是一个控制结构,可以重复的特定任务次数。 语法: while循环的语法是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,407,028
精华内容 562,811
关键字:

while现在进行时