00:00
好,我们继续来上课,那么上节课呢,我们完成了我们这个动态万年历的制作,那么这节课呢,我们再来看我们做这个验证码的函数,那么验证码的函数有要求,就是如果用户传入字体库的文件,我们就需要用自理库文件写入,如果没传入的,我们就使用默认的,对吧?那么好了,在这里边其实不用考虑太多,我们就想啊,验证码我们实现需要几步。对吧,是不是总共还是那么几步,咱们画图就是那么几步啊,那这个比如叫做Co-func好了,那在这里边来,我们要实现验证码是不是需要一步干嘛。创建画布对吧,第二步呢,分配颜色,第三步呢。这个绘画。绘画对吧,绘画的时候一样,我们这里面需要考虑什么,考虑的就是第一个我们要画。干扰线干扰点也行,这是什么,随机打。随机对吧,然后再来3.2,那是什么花干扰。
01:00
干扰线,然后也一样随机的对吧,然后还要写什么,什么叫写内容来写文字,写文字对吧,写文。文字啊,写完文字以后,那接下来干嘛,接下来是不是告诉浏览器图片的相关信息,对吧,然后呢,输出到浏览器,然后呢。第六件事干嘛呀,是不是释放资源啊,是不是就实现这六步就可以了,对不对,哎,那一样的,你看在这里边f u nc function,比如说这个叫做V。Cud库的,诶好了,然后呢,在这里边我们要实现验证码,那实现验证码的功能是不是就相当于只要你一调用这个函数,我就给你输入验证码啊对不对,哎,所以这里边最终我这个位置来。也就是说,验证码。函数对吧,那最后返回的什么东西,返回验证码。图片是不是这个意思,哎,只要你一调用,我就要输出验证码图片啊,不能要返回,应该要输出验证码图片啊。
02:06
看的是输出的验证码图片啊好了,那在这里边咱们就把这几步给它完善了就行了呗,那第一步第二步第三步第四步把这些东西直接拿过来,来,CTRLC放到我的这个函数中来,对吧?放过来以后把这个前面的小星星肯定咱都得去掉啊,我们先给它注释,注释完以后这个小星星不要这都不要,这也不要。都不要了啊,标要以后通通把这些注释往后缩进一下好了,收进完以后咱们来看第一件事,我们干嘛创建发布对吧?那创建画布,这里边我们来个资源到image,等于image可触开,然后你创建多大多大的画布呢?那是不是用户可以指定啊,对吧?比如说我默认给一个Dollar w等于100 Dollar h等于40,这是用户指定的对吧?那也就是说这里边我穿越多大发布Dollar w和Dollar h是不这个宽高发布。
03:01
哎,好了,那有了这个画布以后,接下来我们是分配颜色,比如我先给一个背景颜色,背景颜色呢,咱们是随机的,对吧,所以以image color的。C。LT给谁给到了乙面积里边分配什么颜色,随机的颜色MT杠,比如从200~255随机。CTRLCCTRLVV好了三个对吧,分完三个颜色以后,接下来干嘛,我是不是要给背景做填充,对吧,填充。背景吧,那填充背景使用的什么image I给谁呢?给到了image里面,从00点开始填充BA这个颜色是不是这样的?哎,填充完以后,这里边我就先告诉图片的相关信息了,对吧,那就直接在这里边还等。Content-type内容的类型image gpeg,那对应的我就需要用image gpeg来输出这个刀的image,然后释放资源image d输出释放这个到了image好了,那现在咱们来看啊,对于这个我基本的已经功能实现了,对吧?那VCOD我们一定要用,先看看背景颜色有没有啊。
04:06
零二等于错了。来这里边是不是就有了,有了以后咱们是不是删错了,是不是可以给验证码一个小边框对吧,那给他一个小边框的话,那这里边我就要干嘛画一个矩形了吧,对吧,同样我要给他一个边框的颜色,对吧?所以在这里边我们给它做一个边框的颜色啊,到了这个border color等于image。Color对吧?给到image里面分配25500哦,边框的颜色有了,边框颜色有了,那接下来我们就开始就画一个画边框对吧?绘画边框那叫做以image iate。叫做R。是不是他?对吗?画一个矩形。来看一下,叫做。Image re,接re,画一个矩形没错吧?哎,那好了,那画矩形的画往哪画,往这边画从哪开始,从00点到哪结束,到我的宽度减一到和和和什么和我的高度减一对吧?然后矩形的颜色呢?是不是我的这个包的color?
05:13
对吧,那现在我们再来看边框的颜色是不是搞定了,哎,搞定以后接下来干嘛,接下来是不是就画这些干扰线干扰点了,对吧,那画这个干扰线一样,它是随机的,那既然是随机的我就可以怎么办?我是不是可以在这里边for循环到了,比如嫩。等于零到了。L小于10DOLLAR line,我为什么不用I呢?再加啊好了,那。这里面一样随机的画线,那我是不是可以给线分配颜色,比如Dollar Co color。让它等于一个。Made c娃。A,对吧,给到了一面积里面MT-wrong的,那这个比如让它浅色一点的,比如说一百五到一百九的。
06:05
两点决定一线,对吧,来。这是一个点啊,不不不不错了。什么乙面积的190,这是我的这个坐标吧,那坐标是不是应该是什么?到了宽度减二。到我的这个。不能,应该应该是从零对吧,到我的宽度减二吧,哎,因为咱说了别画边框上啊,然后呢,还有什么呢,还有的X这个Y值呢,就是从我的零到我的。高度减是不是这样的,然后这两个值干嘛给它。看出来X这写的什么,这是分别的颜色吧,对不对,那那写给错了啊,MT-round啊,还是一样,那就是从一百五到到190。CTRLCCTRLVV,好了,来,颜色L有了,颜色有了,接下来我们开始进行划线,以may解呃线,以image进。
07:03
对吧,给谁画,给他画对吧,然后从哪开始呢?MP-round,那从我的这个宽不对,从零到我的这个宽度夹随机一个数,对吧?再来MP高ru,从我的零到我的这个高度减二,再来随机一个数,那好了。CTRLCCTRLV2个有了,有了以后接下来呢,再给它线的颜色learn color OK,完事。好,那现在我们再来看随机的干扰线,是不是有了干扰线完事在里边是什么?里边是不是就是随机的干扰点啊?哎,那干扰点也一样,我放循环,比如说刀I等于零到I小于300吧,Dollar I小,呃,加加。那在这里边到了这个这个这个点是吧,Pixel等于等于什么呢?等于这个。Image I image image的给糟了。image里边I。
08:02
MG里边还是一样分配随机的颜色,这个比如说呢120。或者一百一啊到多少到一百五对吧,这个重复不不怕对吧,线跟点的重复是不怕的啊来。两个坐标决定,呃,不对,三个颜色啊,这是颜色好了,那线完事了以后,接下来是什么,接下来就是画了吧,画点了吧,点那个颜色完事啊,那就是set p给到了1IMAGE里边,再去画,画什么呢?这里边嗯。Dollar。呃,不对,MT-round还是随机对吧,从什么呢?从零到不能干这零,咱们应该从二从零是不是这个一样也从零,是不是也能随机到我的这个边框上去,对吧,所以我都从二开始啊。从二开始。这个也一样,也让它从二开始,那这里面呢,我也是从二到我的这个宽度减二对吧,然后在MP方round的从二到我的高度减二好。
09:04
把它复制一下CTRLC。跟这位。两个点决定。两个系咱们是画的干扰点,干扰点是不是就一个参数来给个SY就行了啊,接下来什么是颜色了吧?到了PL好颜色。那OK,我的刚刚点就画好了,好了以后现在我们再来看刷新刚刚点,所以OK了,OK以后接下来干嘛,马上画文字了,那画文字,那OK我在比如在这块画文字啊,完文字我们拿上来画啊。来写文字。在这儿我们给它放到。这里边。好了,那写文字我是不是得有文字才行呢?当S等于那ABCDEFGHIJK。LMNOPQRS。
10:04
T。然后UVWXYZ,对吧,然后继续ABCDEFGHIZ。KLMNOPQRST。UVWXYZ好了,然后。123456789,然后把这些重复的我们给它过滤掉,对吧,然后这里面的O还有这个L。还有大写的这个O。然后还有什么,还有我的这个IL,这个L是没问题的了啊,那OK,剩下的是不是就差不多了,哎,好了,然后这里边给他一个分号注释掉啊。或者是怎结束啊,那有了这个字符以后,接下来干嘛,咱们是不是要定,比如说你要告诉我写几个字符是不是也可以啊,那比如说在这里面我再来定一个am,比如说默认等于四,也就代表了它要画四个字符吧,哎,那画四个字符,那在这里边我是不是相当于随意取四个那一样放循环到了str,对的Dollar I等于零,Dollar I小于小于S小于am,然后到了I。
11:12
对的好。这是不是在循环的去买啊,那我每次循环一个,我就往里边写吗。我想想啊,我们每次循环循环四个。循环四个往里边写没有问题,那么也就是说在这块我注意我们说了,如果你传入自己,我是不是用你字体库的文件,如果没传入的话,那是不是就是用我自己默认的对吧?所以在这里边啊,我再给它加一个,加一个什么呢?比如说我加到前面了啊呃,Fo。FA。My family等于等于什么,默认等于个空对吧,那也就是说在这里边循环的时候,我就可以判断了吧,判断什么呀,如果这个。呃,糟了。放family,如果它等于等于空的话,那这个时候是不是就使用系统字体库使用系统。
12:06
字体协助对吧,那否则干嘛呀,是不是就是使用使用什么使用这个呃。一个是使用系系统自使用这个用户指定的字体库文件嘛,是不是这样的,哎,那包括这个这个你看每次循环我都判断还我还不如直接干嘛呢,把它拿到拿拿到这里面来,拿到这里边来。拿自己边来。好了啊,看好了,我是不是直接拿到这里面来了,哎,也就直接判断你有没有这个自理,如果你没传入,我就直接按照系统自理库写了,系统自理库写,那在这里边我是不是一样定义一个。直接是。往里面写什么?每次循环写一个字符对吧?那我定一个X值到X的位置应该等于什么?是不是就等于我的这个刀了?W的宽度除以到了um,除完它之后呢?再进行乘对吧?乘以谁呢?乘以到来。
13:08
是是不是这样的。哎,乘到来,然后每次让它加加一个什么MT-round,随机一个,比如随机一个三到十的这么一个数啊好了,那到了Y呢,就等于什么,等于从它是左上角的下坐标对吧,那也就是从。MT-round,比如说从二到我的这个高度的一半。是不是就可以了,对不对,那XY跟有了,有了以后呢,接下来我们是不是就要往里面去写,那不光写还有什么,我字体的这个颜色是不是也可以啊,比如说这个放等于image。Color,然后给谁给招了一面女,再分配MP-run的都是随机的对吧,比如这个是从零到100。CTRLCCTRLVCTRLV,好了随机的字体颜色,那接下来在这里面我们就是以image接iag,以image X ch。
14:03
Image I及image ch image啊,然后往哪写,往这里面写对吧?然后写多大呢?MT-r run3到五的一个随机,然后坐标点XY是不是有了,然后再往后写的是什么?写的是哪个字符啊,写的字符呢?是不是就是Dollar。Str中国号在这里边是不是随机找一个MT-round RA再来来怎么呀,那就是我的这个,呃,从零到到什么呢?到我的这个SL1N,再获取到了SSPR的长度,它减一是不是就完事了。然后再往后呢,再往后什么,再往后就是我的颜色了,那就是我的这个。呃,放到卡里了吧。放到卡了,好,那这个时候是不是就写完了,哎,写完以后呢,现在我们来看可不可以啊,在这里边来刷新。那你看。每次我是不是拿到了。
15:00
到了吗?哎,字符是不是咱就有了,有了,但是注意啊,我们最终验证码要去做比对的。啊,所以我要把它这个每次写入的这个字符保存一下啊。每次写入的字符保存一下,那这里边。来了哦。定义。保存的字符啊,来到了L,到了这个new str,或者这个到扣吧,到扣啊等于空中串这个字符,最终咱们是不是要比对,别人输了验证码,你是是要比对啊,所以你要把这个字符保存一下啊,所以在这里面我先将这个扣的或者等会儿再保存吧,我们先这么写也没问题啊。好了,那这是用户传入没传入字体,我们这么去写,这已经可以了,对不对,那如果用户传入字体呢,传入字体我是不是就载到这里面来写了,那在这里面来写,我是不是一样要循环啊,那继续放循环,Dollar I等于零,Dollar I小于Dollar a,然后Dollar I加加加,加完之后在这里边一样,我Dollar的放color是不是还是要等于这个image。
16:05
直接把这句话拿过来了,CTRLC,对吧,这个没办法了,因为每次进来循环时候,是不是都要执行它一次,对吧?然后到了X呢,X的位置到了X就等于到W还是一样除以到nu。M,然后再乘以一个Dollar I,再加MT-round,要么比如说这一个,呃,从三到十再随机一个对吧,然后到了Y呢,Dollar y的这个,由于我们使用自理库的这个文件,它是什么?它是自体的左下标对不对,左下角,所以我要他这个高度的一半。高度的一半加五吧,或者不加了啊,高度的一半到我的高度是不是就可以了,对不对,哎,因为它是左下角,左下角的下标吧,然后接下来使用什么image。TFTST给到了一面积里面去写,然后字体的大小,比如随机一个15~20的,然后倾斜的角度MT-round随机一个零到。
17:04
零到多少,零到40的,然后再往后呢,就是我的X点跟我的Y点对吧,然后再往后呢,就是我的这个,呃。字体的颜色了吧,那字体的颜色我们用哪个呢?用我们的这个放到color,然后再往后就是我们的文件,文件就是我刀了,放到family,然后以及我要写入的内容,写入内容,那我来个str来LN吧,啊注意这个变量是不是没有啊,这个变量我在这啊,到了len等于等于什么呢?就等于这块字符串。是不是这样的,因为这个往往再再写一次太长了啊。CTRX给它减去啊,这里面也叫L1也叫L,那这块我是不是LN等于这么一个字符串,对吧?这是不是获取字符串了,那那同样这里边是不是也一样等于这么个字符串,获取这个字符串了,哎,它只能在循环里面去获取,对吧?哎,每次获取写一个字符,每次获取写一个字符好了,那现在我们来看可不可以啊,来再来刷新。系统的这没问题对不对,那这块没问题,以后接下来我要用系统自理库的,那咱们来看啊,在我的这个上一关里面,是不是已经有了这个自理文件,我们直接就用这个这个字体文件了啊。
18:10
CTRLLCTRLC好了,这个路径只要对了就行,那接下来其他的我都都是什么,都是默认我这里所有的默认参数对吧,那好了,只要我给它加一个它。加了他是不是就不为空了,不为空了,那这个时候你看我用我们指定的字体库文件去写。是不是也有了?看到了吧,是不是也OK啊,哎,好了,那写完了,写完了验证码怎么用这才是关键,对不对,怎么用啊,那看好了,在这里边我们来新建一个PP的文件啊,比如叫03USE-COD code使用验证码嘛,那使用这里面正常应该什么?应该就是我们的一个呃,表单页面对吧,比如form,然后呢,来个master的。呃,比如说这里面就POS的方式吧,然后这里面来个用户名。用户名,Input test。对吧,然后比如说来个user。
19:01
好,给他一个BR,然后再来密码。铺的P,呃,SSWW。P swd password好了,来,PWD。哦,这是门的密码,密码完了之后是不是可以验证码了,那验。证码啊,验证码那一样input。他知道起名叫什么叫code的COD,那他它后面是不是咱得通过什么,通过这个图片给啊引入啊引入什么呢?你就直接引入零二扣的这个文件就可以了,因为在这个文件里边一调用这个文件,注意你打开这个文件是不是就显示一张图件对不对,所以在这里边我就通过图片标签直接去引入这个文件就可以了啊那么引入完以后,好了之后我们来一个什么,来一个评价按钮呗,Me。找找登录吧,好,那现在我们来访问零三看看可不可以啊,来找你找到零三可不可以,可以吧,那比如说用户名我的me,我的me。
20:01
WYYS,那我一点击登录一点登录的时候,来是不是跳转到下一个页面,下一个页面,比如说这里面叫什么呢?叫做do-AC小PP啊好了,那这个页面我们来新建一下啊,在这里面新建一个PP文件,叫做do杠。a.PB。在界面嘛,直接。下线po看了,我直接打印POS的了啊,来重新刷新,这里面再来一次我的密,我的密。二。嗯。I。P。可能大家都知道,这明明是N,我就写了个P对吧,那好了,当我点击登录的时候,过来以后,你看我拿过来拿拿过来拿过来了,但是这个验证码谁能告诉我是对还是错呢。是不是就不行了,哎,那么也就是说在我去封装这个验证码函数的时候,我说必须要把把什么把我当前循环的这个验证码保存住啊,对不对,所以在这里边我们定义一个保存验证码的这个字符,比如说叫做什么COD。
21:03
受力啊,受力等于什么?等于个空的不串,然后呢,你不管进到这里还是进到这里,对吧,因为最终我是判断的,你传入字体了,我就进到这里循环,你没传输字体我就进到这里循环,那不管进哪个循环,我只要得到这个字符了,我是不是就让它到了COD点等于到了二一就可以了,对不对,同样下面是不是也一样,在这里面只要有了那是理到了COD就点等于。W是不是就可以了,对吧,那好了,那现在这个字符我确实是保存进来了,对吧,那保存进来有什么用啊,我在这里面能调用到吗。这里面能调用到吗?肯定不行嘛,对不对,因为这个函数在哪调用的,注意我零二这个扣里的函数是不是在这里边引入的,看到吗?引入这个门函数在战争是不是在这个地方最顶部去要用。是不是根本就没有用,对吧,你看比如说我来接收一个啊扣来接收,接收完以后啊,我们在这里面来为阿BP反印。打印谁呢?打印这个Dollar COD来。
22:01
返回来刷新,刷新有用吗?没用是吧,我这里面因为我访问的是他啊,我得访问谁啊,我得访问零二十才可以啊来。你看。零二这里面呢,咱要想看到结果,我得怎么办?我是得把那个海注释掉,来把海注释掉。下面再来看刷新。嗯。一个空。我这会没瑞是吧,来rein直接到了COD先瑞出来啊来刷新。是不是拿到了,看到了吧,那你拿到你在这里边有用吗。你上面这里边你怎么获取的,对吧?这就是一个表单页面,零三这个页面,你看我就是引入这么一个文件,对不对,所以验证码呀,不能拿它做返回,不能拿它做返回啊,那这这上面这上面这里边我也不需要去接收了啊,只需要调用就可以了,那怎么办?注意验证码,也就是说当我们存储好了这个验证码,你看好了,在这里面这个扣的经过这里或者是这里存储好的验证码以后,它是不是要长久的保存啊,对不对,而且这个验证码是不是可以在这个页面中用,也可以在这个里面中,是不是可以跨页面的,那么大家记住,只要可以跨页面,在这里边我们先干嘛呢?先保存到另外一个地方啊,固定的保存到什么呢?是ses筛中。
23:16
三中啊,这个家伙,这个到了下线。Ses session可以干嘛?可以跨页面使用,可以跨页面使用啊,因为我当前定义变量在这个页面结束S不就完事了,哎,所以先保存到这个变量里面,到了下线,比如说这个是一个数组啊,到了上线SSESS。SE,诶,SEI,比如这里边我给它定义一个什么,定义一个扣,这是个数组的写法呀,等于什么呢?就等于我的这个COD到了COD好了,也就说我把这个验证码,最终我做出验证码是不是放到这里面来报存了,对不对,那记住只要用到session,我就得在我的最顶部开启session才可以,所以在这里边我需要干嘛呢?开启。
24:01
SE30这块你先给我固定的记住啊,死记啊ses。还有c star。S start啊塞词码,这是固定的解码好了,那在这里边开启了S,那好了,那最终你看好了,这都不影响我正常的输出的,来你看刷新是不都没问题啊,没问题以后问我拿到这个页面是不是开始进行比对啊,那在这个页面怎么来比对呢?那一样,这个页面我是不是因为我验证码是不是存到session里边了,所以我来打印session到了下线S筛,那么打印筛来说,这里面是不是又使用到筛了,那只要你使用筛的地方,你就给我塞塞。十大以下。STRT大小好,那这个时候我们再来看啊。来刷新,刷新完以后在这个验证码里面,比如说你看好了啊,这PNF对吗?然后。我的me,我的me来点击登录来你看JPNF这是session里的吧,这是不是我POS的个接收的,这回是不是就拿到了这JPNFZPF对不对,那好了,那接下来怎么样,他俩比对呀,那比对的话是不是就可以,如果如果什么如果到了下届post。
25:07
里边的扣的钥匙。不等于到下线session里边的coco,我是不就给你提示验证码错误,来这里边我就来给你提示一下啊,我教给大家一个固定的弹框块的标签,然后呢,再来一个结束的S块B标签,这是不是使用PB跟GS做交互对吧?哎,这里面来一个alert,就是GS的弹框叫什么呢?叫做验证码输入错误啊好了,那错误以后在这里面我在干嘛呢?Location跳转跳到哪里,跳转到刚才那个页面叫做什么叫做。当前目录零三柚子杠code的PD,好,现在你来看啊,这回我再来返回来再刷新这里面来,呃,Me ad m adnl勾IU对吧?来点击登录告什么验证码输入错误,确定为什么输入错误呢?
26:03
默认情况下,我在这里面是不是区分他要写的,你看啊,E sit,我先退出这个页面啊,来比如说QXQE对吧?来点击登录,你看我拿这个QSQE跟这个QSQ去比对能对吗?这肯定不行啊,哎,因为大小写是不是有区分的,所以在比对之前怎么办?使俊FTR,使俊to。Lara。对吧,我统一给他都转成什么,转成小写,或者统一给他都转什么转成大写都行啊来,再来一个street two。好,这个时候我们再来看啊,我把这个e sit注册掉了啊,注掉以后现在我们再来看比对返回来再刷新一次来。这没变,Ad mad MU。5U来点击登录,你看过来了,对吧,只要他没有跳,没有弹出这个框,是不是就是正确的了。是不是就是正确了对吧,否则比如说在这里面,这里面是不是正确对吧,那正确的话。
27:05
我这里边是不是可以艾艾一个什么,比如说。我就直接写个正确了啊,Apple正确,那你看我再来刷新确定的时候是不是告诉正确对吧?哎,那好了,那现在会用验证码了吧,那会用完以后一样还有个问题,什么问题呢?你看比如说我不可能每次都在这刷新去更新验证码,对吧,对不对,我是不是有一个什么,比如看不清换一张,它可以可以更新的,对吧?所以这里面怎么办?那你看我在这块直接给了一个A标签不就可以了吗?看不清换一方,好,那现在你来看我再来刷新,这里边来点看不清换一张,你看每次点它是不是都变换,为什么?因为我每次点这个A标签是不是都重新加载了这个页面,A标签是不是给空粒子,空粒子是不是访问当前页面,访问当前页面,只要一重新加载,是不是它就重新请求了这个这个例子请求这个例子去加载图片,那验证码是不是就变换了,所以在这里面你看我要刷新,每次点是不是都变换了,但这么用能不能用,能用但是有个弊端,什么弊端呢?你看我的密,我的密比如说我的内容一旦表单一旦合出很长的时候,当最后一项他才出验证码,那一旦验证码看不清,你看我一点看不清,换一张你看。
28:07
我的表单内容是不是都没有了?对不对,哎,所以咱们尽量不要用它,那怎么办呢?我教给大家一个GS点击的更换啊,那怎么办,在这里边咱们来看。我给他一个什么呢?给他一个on click c c,这是JS点击事件啊。当你点击这张图片的时候,我让自己的src重新干嘛呀,重新去加载谁呢?去加载这个文件叫02CODE-func的PP,哎,重新去加载这个文件,那现在你来看啊,我在这里面重新刷新一下,比如说看不清,我点击,诶变了吧,但我再点。刷新。是不是都可以了,看到了吗?我没有点看不清关一张啊,我点的是这那现在你看a me。哆的咪来。变不变?是不是可以了,这些是不是都保持住了,然后MMKN对吧,那看不清,换一张你看是不是都能保持住,那这块画了,那NYAQ1.1提交是不可以了,看到了吧,啊返回来再刷新。
29:07
点点点点点点点点,这里面是不给个A,你看给个A。是不是就可以了,对吧?哎,如果如果在你的浏览器里边要是不可以的话,哦,那这里边你就需要干嘛呢?需要去给他传一个参数,因为这个有一个要求啊,就是我们浏览器有个安全的机制,会干嘛呢?就是他会判断,如果你每次都访问同一个页面的话,他会不让你进行访问,那怎么办?那你就传个参数呗,传一个什么呢?加加什么MT,不对,是march m math much.random RA。要怎么加一个GS的随机数啊,相当于传的参数,传的随机数就可以了,那再来刷新我返回啊,取消来点回来重新刷新啊,这个你看点点点点是不是也可以,这里边来A。诶,应该点不是保持住了啊,是不是也保持住了,哎,那验证码的使用我们是不是就知道了,哎,那好了,那这节课我们就到这里。
我来说两句