解决 Joomla session_start(): Failed to read session data 原
昨天,一个客户将D计划安装包安装到自己搭建的web服务器后,在还原的时候出现了 Warning: session_start(): Failed to read session data: user (path: ) in /www/wwwroot/dstu.m2oo.com/libraries/joomla/session/handler/native.php on line 260
Error: Failed to start application: Failed to start the session。这是一个很经典的Joomla问题,如果使用google搜索,可以搜索到超过1000条信息。导致的原因也是各式各样的,下面是D计划全站包出现该问题的解决方案。
1,问题描述
用户购买了D计划的全站包,部署到自己搭建的主机上,在还原的时候出现了 Warning: session_start(): Failed to read session data: user (path: ) in /www/wwwroot/dstu.m2oo.com/libraries/joomla/session/handler/native.php on line 260
Error: Failed to start application: Failed to start the session。
2,问题分析
上面的错误说明和session有关,第一个需要检查的就是全局设置中session的设置文件。如图:
正确的设置应该是数据库。
另外,php.ini中有一个session.save_path的设置也可能导致这个问题。正确的设置为 session.save_path = "/tmp"
不同的PHP版本网站切换也会出现这个问题。典型的为php7.0->php7.2
当然,还有一些其他的原因,目前我并没有遇到。
3,解决的过程
由于用户仅仅只是解压网站的源码,刚开始执行还原时出现的问题,因此,此时joomla网站并没有建立。所以这个全局设置是可以忽略的。并不是这里有问题。
1,检查php版本
以前也遇到过这个问题,当时是用户将php版本从7.0升级到7.2后出现了这个问题,因此,就尝试将服务器的php版本降低到7.0后发现该问题依然存在,说明本次不是php版本引起的。
2,使用kickstart.php,重新解压安装
我在本地服务器上重新测试了发给用户的D计划全站包,是可以工作的。那么就排除了代码不全的问题。为了降低用户还原网站的难度,我们打包的全站包都是zip格式的,用户可以直接解压安装使用(不必须使用kickstart.php)。我有点怀疑是不是解压的时候出现了问题。因此,这次使用kickstart.php来还原全站包。刚刚点击提取文件,就出现了问题。
问题很明显,安装环境文件夹权限存在问题。登录ftp,查看文件夹的权限,再次确认了我的怀疑。是否文件夹的权限不对会导致session_start()出错,这个我并不确定,但先将文件夹权限设置正确总是没错的。
为了方便,在ftp中将网站的根目录设置正确的全局即可(如果你不清楚,可以直接设置0777.表示具有所有权限,实际发布的网站并不需要这么大的权限)。然后重新还原,发现问题解决。发现session_start()问题也消失了。
3,小插曲
网站还原正确后,用户点击首页后发现系统提示无法找到cache/zfree/XXXX 等文件。并且网页的图片显示混乱(可惜当时没有截图)。检查后发现,导致这个问题是cache目录没有写权限,系统无法写入缓存文件。
3,总结
1,如果大家在还原的时候Joomla网站的时候出现Warning: session_start():这个问题,那么可以检查是否是您的安装环境存在问题。最直接的解决方案就是将网站的根目录设置为0777.
2,自己搭建web服务器的同学,如果不清楚Joomla程序需要的权限,请将根目录设置为0777,这样可以避免很多问题。另外,我们也推荐使用BT面板安装宝塔面板来管理Linux服务器,可以解决大多数的权限问题。
3,下面是从google上找到的关于session_start()问题的一些可能的解决方案
- 1,降低php版本到7.0
- 2,设置php.ini中的。默认为session.save_path = "/tmp"
- 3,如果你重装或者移动Xampp到一个新的目录 If so then find the following in your installation; C:\Xampp\mysql\bin edit my.ini Change the directory for the new one in Notepad++ i.e Find C: Change to D: result = D:\Xampp\mysql\bin save my.ini and restart MySQL. That should do it.