网站登录出现问题,登录页(login.php)的验证码图片能够正确显示验证码,但是登录校验页(login_in.php)总是提示验证码错误,验证码图片的产生页是rand_number.php,全部使用session机制实现。试着分析,各个页面session_start( )没有报错,尝试在login_in.php中输出rand_number.php产生的验证码,但是没有输出结果,本机运行则没有问题。网站放到虚拟主机一年多了,一直没有出现这个现象。
搜索网络,原来问题主要在于虚拟主机php.ini配置——session配置问题,特别在于session存储路径配置问题。套用很多现成答案,但是不能解决问题,有的解决方案非常麻烦,索性看都不看。终于发现session保存路径应该放在session_start( )之前这个关键。建立两个测试页面,上传到虚拟主机,通过t1.php传递session到t2.php:
t1.php
<?php
$session_path = dirname(__FILE__)."\session"; //重新声明session的保存位置
session_save_path($session_path); //重新声明session的保存位置
session_start();
echo $_SESSION["a"]=8;//注册变量
echo '<br /><br /><a href="t2.php">----t2.php----</a>';
?>
输出结果:
8
----t2.php----