碰到一个问题,领导配置的PHPcms后台验证码不正确,登录后闪退情况解决。
估计前台也有这个问题。
开始在网上查
第一种可能:phpcms v9 登录是采用session ,保存session 有两种方式,一种是数据库存储的方式,一种是文件存储方式,默认是数据库存储方式。有时数据库这种方式不行,可以在 \caches\configs\system.php 中修改sesion 的存储方式//Session配置 'session_storage' => 'mysql',将其改为//Session配置'session_storage' => 'files',试试。
第二种可能:php配置环境问题,在PHP.INI 中 改成register_globals = On 打开 默认是register_globals = off,再就是要保证session.cookie_path = "缓存文件保存目录,改为"session.cookie_path = /"都有可能无法登录。
第三种:hosts 文件问题,将你想要的域名指向本地 例如:ww.huxiaoguang.com 127.0.0.1 增加这一行 ,域名改成你想要的域名 ,然后再本地使用你的域名安装PHPCMS ,这样有个好处就是避免你在本地安装后 ,然后上传到服务器之后又要修改\caches\configs\system.php 配置文件,而且还要清空一些缓存.
第四种缓存配置文件配置错误的,也有可能出现错误!
有所谓的几种解决方法 使用第一种可以在 \caches\configs\system.php 中修改sesion 的存储方式//Session配置 'session_storage' => 'mysql',将其改为//Session配置'session_storage' => 'files'
切换了无数次 无效,第二方法php.ini里没找到那一个
试了一下午毫无头绪,思考一下,这些都用session有关
便在登录方法时打印session
var_dump($_SESSION);
发现登录时会有SESSION
但登录成功后跳转index时
SESSION却为空了!
/**
* 判断用户是否已经登陆
*/
final public function check_admin() {
var_dump($_SESSION);
}
然后继续在这个地方研究,网上查,两个小时还是毫无头绪。。。
幸好之前有一个正常运行的phpcms项目,便将文件进行对比
终于在这个文件比较时发现问题。
session_mysql
去掉ini_set("session.cookie_httponly", 1);
httponly是微软对cookie做的扩展。这个主要是解决用户的cookie可能被盗用的问题。
那HttpOnly就是在设置cookie时接受这样一个参数,一旦被设置,在浏览器的document对象中就看不到cookie了。
因为所谓领导使用的时ip地址,目前还不能确定的说,所以只是可能是ip访问的原因,ini_set("session.cookie_httponly", 1);时cookie不能被访问,sessionId获取不到,所以!!!访问不到对应session数据
所以session为空!