最近遇到一个项目中用的是Thinkphp这个框架开发的,其中在登录这块有验证码这个功能,其实这个功能是TP自带的,其中主要方法是buildImageVerify,位于ThinkPHP\Extend\Library\ORG\Util\Image.class.php中。该验证码的机制就是当前台每次重新绘制验证码时,那么在后台就会调用buidImageVerify这个方法,该方法主要是绘制验证码,并且把验证码上的数字或者是文字信息存储到session中。这样就完成了对验证码的存储以及output到前端,做校验这个都明白的,就是拿用户输入的验证码和session中的做比较,一致则返回true,否则返回false。当让了TP中是对验证码的md5做比较了,因为session中就是存储的是验证码md5的值,部分代码如下:

 static function buildImageVerify($length=4, $mode=1, $type='png', $width=48, $height=22, $verifyName='verify') {
import('ORG.Util.String');
$randval = String::randString($length, $mode);
session($verifyName, md5($randval)); //MD5
// 其它代码 ......
}

当在前端一直报出验证码输入错误的信息时,我大概分了几个步骤来找原因:

1.首先是确保自己的输入是正确的。

2.其次是验证代码的逻辑是否是正确的,是否有中途将session置空的操作。

3. 最后是检查跟PHP相关的配置是否有问题。

这样我就直接进入了第二个步骤,就开始调试代码,用var_dump 这个函数在验证码比较之前将POST过来的验证码和session中的验证码打印出来,结果发现session中的验证码一直为空,说明前端刷新的验证码并没有保存到session中。我继续调试返现session所存储的名字和取session中也是一致的。我开始怀疑session.auto_start的设置问题,尽管TP这个框架会自动启用session.auto_start 。检查的结果却是配置文件中是默认开启的。最后参考TP官方社区的这篇帖子:http://www.thinkphp.cn/topic/3542.html,还是同样的问题。最后我就开始检查php.ini 的配置,找到了session.save_path ,截图如下:

aaarticlea/png;base64,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" alt="" />

我尝试的访问后面的路径,但是不存在,并且在地址栏还有错误报出。因为在给session赋值的时候除了会网客户端的cookie里面写东西,同时也会想服务器上的session.save_path 这个目录下记录session的信息,文件命名默认是以session.id来命名的。所以我得出的结论是上面所配置的路径是存在的,有时候即使存在但是没有访问权限,也同样会导致session无法写入的。所以我将该路径指向了“C:\Windows\Temp” ,修改完毕后重新启动apache,验证码就ok了。

Think PHP 提示验证码输入错误的更多相关文章

  1. c编程:提示用户输入一个0—9的数字进行猜测电脑产生的随机数。一共有三次机会。

    // //  main.c //  使用c语言进行编程: 题目:由电脑生成一个由0-9之间的随机数,提示用户也输入一个数字进行猜测.当猜测三次仍不中的时候结束程序. 编译环境:Xcode6.3 特别介 ...

  2. 远程桌面控制winsever,复制文件或者文件夹夹时出错提示“未指定的错误” 二(如何让远程电脑识别U盘)

    一.背景:   要给远程服务器安装数据库,把安装复制到服务器,出现复制文件或者文件夹夹时出错提示“未指定的错误”:通过映射网络分享文件方法来解决,发现服务器访问网络出现错误,ping分享文件电脑的IP ...

  3. win7访问局域网总提示用户名密码错误解决方案

    win7访问局域网总提示用户名密码错误解决方案 1.点击开始-在搜索栏输入:secpol.msc(或者直接按下win+r键,输入secpol.msc),打开本地安全策略. 2.找到“安全设置”的“本地 ...

  4. 百度地图的demo提示key验证错误!错误码:230;

    在已经有BaiduMap的APIKey后使用AndroidStudio导入Baidu地图的as版的demo,提示key验证错误!错误码:230; 首先,因为百度地图demo中用自己的keystore文 ...

  5. python三次输入错误验证登录

    # login.py# 提示用户输入用户名和密码# 验证用户名和密码# 如果v错误,则输出用户名或密码错误# 如果成功,则输出欢迎,xxxnum = 0while True: name = input ...

  6. (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”

    金蝶KIS迷你版.标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系” 2013-07-10 12:17:51|  分类: 金蝶专题|举报|字号 订阅       金 ...

  7. lr cc安装后提示“内部出现错误,无法创建文件夹”的解决办法

    好多人在使用lr过程中提示“内部出现错误,无法创建文件夹”,今天MacW小编给大家带来了解决的方法,一起来看看吧! 1.此问题主要是用户权限的问题. 下载这个shell 脚本,此 shell 脚本可自 ...

  8. SSH输入错误Action

    在类型转化.输入验证校验 .文件上传等出错的时候,如Action中某个变量是int,而上传的值是"ABC",此时Action不会执行execute()函数,而是直接返回result ...

  9. vmware vcenter orchestrator configuration提示“用户名密码错误或登录失败超过次数被锁定”

    首次登录,使用默认用户密码登录vmware/vmware vmware vcenter orchestrator configuration提示"用户名密码错误或登录失败超过次数被锁定&qu ...

随机推荐

  1. LXNetwork – 基于AF3.0封装的iOS网络请求库

    本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...

  2. 深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用(下)

    深入研究Block捕获外部变量和__block实现原理 EOCNetworkFetcher.h typedef void (^EOCNetworkFetcherCompletionHandler)(N ...

  3. js工作中编程习惯

    在前端编程中总结的习惯不管js还是css 还是后端开发这几点都是必须要做到的做好这几点不管去什么公司都是受到别人的尊重 善用变量,尤其是对DOM结构中的ID以及CLASS 多写注释,自己不熟,前面写后 ...

  4. C++: Why pass-by-value is generally more efficient than pass-by-reference for built-in (i.e., C-like) types

    A compiler vendor would typically implement a reference as a pointer. Pointers tend to be the same s ...

  5. 如何使用数据卷在宿主机和docker容器之间共享文件

    共享宿主机的目录给容器 docker run -i -t -v ~/download:/home/hello python3-env /bin/bash -v  表示创建一个数据卷并挂载到容器里 ~/ ...

  6. Linux文件与目录管理之ls的使用

    来源:鸟哥的私房菜 查看文件与目录 ls ls [-aAdfFhilnrRSt] 目录名 ls [--color={never,auto,always}] ls [--full-time] 目录名 选 ...

  7. Shell学习笔记 - 运算符

    一.Declare命令 1. 命令格式 declare [+/-] [选项] 变量名 其中: -: 给变量设定类型属性 +:取消变量的类型属性 2. 参数说明 -i:将变量声明为整型 -a:将变量声明 ...

  8. [改善Java代码]减少HashMap中元素的数量

    在系统开发中我们经常会使用HashMap作为数据集容器,或者是用缓冲池来处理,一般很稳定,但偶尔也会出现内存溢出的问题(OutOfMemory错误),而且这经常是与HashMap有关的.而且这经常是与 ...

  9. [改善Java代码]覆写变长方法也循规蹈矩

    建议6:覆写变长方法也循规蹈矩 在Java中,子类覆写父类中的方法很常见,这样做既可以修正Bug也可以提供扩展的业务功能支持,同时还符合开闭原则(Open-Closed Principle),我们来看 ...

  10. wince 位图的使用

    操作位图的基本步骤: *创建位图句柄 *加载位图对象 *创建内存设备描述对象,将位图选入内存设备描述对象 *使用绘图函数进行图形绘制 *删除位图句柄 创建位图句柄并且加载位图对象: *位图句柄 HBI ...