现象
Magento后台无法登录,帐号密码输入都正确提交后又回到初始输入状态,如下图:
环境
VMware WorkStation 9/Ubuntu Server 12.04 LTS, Apache2/PHP5/MySQL5.5(mysqlnd), Magento(1.7)。
Windows 7中安装WMware 9, Ubuntu Sever 12.04安装在虚拟机中,在虚拟机中部署Magento1.7。从Windows(宿主系统)中用虚拟机IP访问Magento后台。
问题描述见 “现象”一节。
处理过程
Baidu了一通,说是Magento的cookie验证机制“问题”.依次做了一下检查:
1。 客户端浏览器cookie是否已经启用,经检查已经OK.
2。采用网上的方法:
修改 app/code/core/Mage/Core/Model/Session/Abstract/Varien.php中cookie验证代码,详细见http://blog.csdn.net/zhengjianqi/article/details/7404194.
结果还是不能解决。
看见varien.php中cookie验证代码中与时间相关,于是联想服务器时间是否有问题(UbuntuServer)。
用date 命令查看Ubuntu Server本地时间,显示为 Sun Sep 14 14:08:48 CST 2013。
服务器上时间与客户机相差近8个小时。注意到CST这个时区标识怀疑是时区设置错误,查看/etc/localtime 发现时区为CST-8。没有错,正好是中国东部时间。
由此,联想到是Ubuntu Server时间同步有问题。
再Baidu VMware中时间同步解决办法主要有二:
1。用VMware Tools,让客户机器与宿主机器时钟同步。此方法简单,但是要安装VMware Tools。
2。客户机中设置NTP时间同步,采用网络时间同步。此方法必须要网络通畅。
选择了方案1,与物理机器时钟同步,问题终于解决。
小结
总结一下,由于每次页面提交携带的时间信息和服务器上存储的时间间隔太大,被Magento认为是cookie过期。
后来查阅Magento 1.8 (以前安装时参考了1.7),显示安装Magento之前先要配置好服务器的时钟同步(采用NTP方式, 参考http://www.pool.ntp.org)。
由此猜想采用注释Varien.php中cookie验证代码应该也可以解决此问题(没有试验过,建议在生产环境中不要采用该方法)
PS: 本次安装VMware Tools还费了不少周折:(, VMware虚拟机硬盘空间太小,要扩充硬盘. 分区,重新挂载...