今天使用Thinkphp写一个东西,突然发现验证码一直无法验证成功。

1、问题:

  • 验证码显示没有任何问题
  • post表单提交也没有任何问题

(顺便说一句,个人觉得thinkphp参考了laraval的很多优秀的地方,我觉得挺不错的,有学习才能有进步)

2、过程:

验证码验证失败的问题困扰了我一天:

  • 一开始我以为是我装的full版本出了问题,认为captcha的composer 存在错误,(full版本继承了captcha)

    • 重新 composer require topthink/think-captcha ,但是也没什么用处。
  • 为了寻找问题,我在我的另一台服务器上重新装了一遍,发现同样的代码能用。
  • 然后各种找....各种找....

3、发现:

最后我输出了一下一开始我以为是我装的full版本出了问题的信息,顺便输出了一下SESSION信息,发现数组是空的

  • 现在的这种验证码都是基于session 闪存实现的,因此没有SESSION的相关信息,这明显有问题。
  • 然后我发现,自己添加的session也不能 dump 出来

想到这点,我去看了一下是否配置了 session 配置选项,发现secure 配置了 true,安全的传输session。

而session的安全传输是基于cookie的,然后我看了一下cookie 的配置!

发现,cookie 的 secure 的选项配置的是false!!!

所以自己傻呵呵的弄到最后才发现,原来问题出在这里。

不是很懂,thinkphp5为什么不做判断呢,可能是因为文档中没有写session 的 secure的配置,也没注意吧。。。

告诫一下自己...

session.jpg


【2017-03-23 更新】

建议的配置中,只配置cookie 的 secure为true即可,而session不需要进行配置。