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

Posted

技术标签:

【中文标题】Opencart 和 PHP 的非常奇怪的会话问题【英文标题】:Very strange session issue with Opencart and PHP 【发布时间】:2015-09-06 16:47:27 【问题描述】:

我已经在 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();
    

【问题讨论】:

我们需要查看您的所有设置,例如 save.session_path,以及处理您的登录和 cookie 的代码。 您是否启用了任何页面缓存? @Barett- 已添加相关代码。不确定哪些文件处理 cookie 和登录。让我知道,以便我发布相关代码。 @JayGilford 是的,页面缓存已启用。 那么我会冒险猜测当客户登录时它没有被禁用 【参考方案1】:

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

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

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

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

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

【讨论】:

【参考方案2】:

我希望这个解决方案能帮助任何在 Opencart 上遇到它的用户。

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

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

【讨论】:

以上是关于Opencart 和 PHP 的非常奇怪的会话问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP cakephp有奇怪的会话问题

opencart 编辑文章

如何从OpenCart 3.0.2.0卸载VQMOD?

PHP会话的数据在页面重新加载之间不一致 - 但会话ID是相同的

OpenCart 最新使用教学视频合集

OpenCart MySQLi问题