Opencart和PHP非常奇怪的会话问题

时间:2015-06-20 22:38:27

标签: php session opencart session-variables session-cookies

我在Opencart论坛上发布了这个,但是没有人能够弄清楚问题是什么。

运行Opencart 1.5.6.4。 PHP-5.4.42

如果用户X在网站上登录,如果其他用户访问该网站,他也会自动从X的帐户登录。我亲眼目睹了这一点,当我浏览它时,它显示我是以500英里外的客户身份登录的!如果用户X在他的购物车中添加了某些东西,它也会显示出来。

所以,因为我通过该帐户登录,我可以从该帐户做任何我喜欢的事情,下订单,修改细节等等。吓人!随着网站流量的增加,整个问题变得更加严重。

我已经尝试将save.session_path一起移动到另一个文件夹/ tmp,但它没有帮助。

我不是一个全职开发者,所以有点麻烦搞清楚问题是什么。如果有人可以帮忙的话会很棒。

php.ini具有以下会话相关条目

session.save_path = /webroot/sitename/tmp/
session.use_only_cookies = 1;
session.use_trans_sid = Off;
session.cookie_httponly = 1;
session.gc_maxlifetime = 3600;

session.php

class Session {
    public $data = array();

    public function __construct() {
        if (!session_id()) {
            ini_set('session.use_only_cookies', 'On');
            ini_set('session.use_trans_sid', 'Off');
            ini_set('session.cookie_httponly', 'On');

            session_set_cookie_params(0, '/');
           session_start();
        }

        $this->data =& $_SESSION;
    }

    function getId() {
        return session_id();
    }
}

2 个答案:

答案 0 :(得分:0)

问题是由于一些客户没有电子邮件(简化的注册表格)。 Opencart很困惑。解决方案:

首先使用随机电子邮件更新客户(请注意,电子邮件不会用于联系客户):

update `oc_customer` set email = concat(LEFT(UUID(), 8), '@example.com') where email = '';

然后更新注册表格以在注册时生成随机电子邮件,以避免将来出现这种情况。

免责声明:我可以访问该平台。

答案 1 :(得分:0)

我希望这个解决方案可以帮助任何在Opencart上面对它的用户。

具体问题与页面缓存有关。如果有页面缓存插件,请确保在帐户&结帐页面。结果是缓存的帐户页面最终被提供给多个用户。

与我在其他地方遇到相同问题的解决方案相反,它无关会话存储和共享主机 - 我在无法共享会话存储的VPS上遇到此问题。