thinkphp验证码在服务器提示“验证码错误”
2016-11-23 本文已影响318人
laotoutou
在本地用thinkphp的验证码扩展测试没问题,放到Linux服务器之后,总是提示验证码错误,以下是我的解决方案,希望能帮到其他人
thinkphp的验证码原理就是后端生成验证码,在前端将验证码显示出来,至于前端和后端的验证比较,是后端生成的验证码加密后通过session传递。
本地正常使用,放到服务器无法使用,肯定不是代码的问题,应该是是服务器的问题,而且很有可能是session出问题了。
至于具体原因因人而异,我是因为 PHP通过外部命令函数执行shell脚本时一些特殊命令需要root权限,所以之前配置更改过PHP的执行用户而导致session不可用。
首先确认你session文件的存放位置,然后确认地址存在,并且PHP的执行用户对该文件夹有权限。网上有一种说法是修改PHP的配置文件中的 session.save_path
的值,然而我没改明白~,我是直接查了当前session文件的位置,然后修改文件夹所有者或直接修改文件夹权限。
通过在服务器运行以下代码查看session文件的存放位置:
原文链接
$sessionpath = session_save_path();
if (strpos ($sessionpath, ";") !== FALSE)
$sessionpath = substr ($sessionpath, strpos ($sessionpath, ";")+1);
//获取当前session的保存路径
echo $sessionpath;
这样就得到了你的session文件的具体位置,然后去查看该文件夹是否存在以及文件夹的权限问题。
附:通过在服务器执行以下代码查看PHP的执行用户(一般为apache或nobody)
system("whoami");
这样输出的就是你PHP的执行用户,然后再看该用户对以上输出的session文件是否有读写权限。