- A+
TNND首先骂一句以抒胸臆,为了解决这个莫名奇妙的问题折腾了好久。下面具体说说是什么情况以及怎么解决的。
问题描述
最近得到一份Thinkphp框架的微信小说分销系统源码,在本地进行测试时可以正常登录后台,但是放到万网虚拟主机中进行测试时却不能正常登录,输入正确的用户名和密码后仍然是跳转到登录页面。通过在浏览器控制台中勾选preserve log进行监控网页跳转情况发现,在正常执行了跳转函数后又继续跳转到了登录地址。另外,在虚拟主机的网站目录Application\Runtime\Logs\Admin日志中发现,报如下错误信息,而在本地测试的目录中没有出现。
session_start(): Cannot send session cookie - headers already sent by (output started at /data/home/………………
session_start(): Cannot send session cache limiter - headers already sent (output started at /data/home/………………
错误原因
在设置session和cookie前,不能实质性的向浏览器有任何显示性输出!如:任何文字,空行,回车,空格等。
产生原因
这个问题出现是因为php文件格式是UTF-8 BOM编码引起的,但是经过排查发现,网站源码中说使用的文件均为UTF-8格式(包括登录控制文件),而只有Application\Common\Conf\config.php配置数据库文件为带BOM格式的。
解决办法
用notepad++打开config.php文件,在‘编码’菜单栏中将其切换为使用UTF-8格式编码(一定不要使用UTF-8-BOM编码)保存后重新上传到网站对应的位置并覆盖,重新打开Thinkphp后台登录地址,然后输入用户名密码即可正常登录并跳转到后台。