Php Magento设置客户会话网关或连接超时错误

Php Magento设置客户会话网关或连接超时错误,php,magento,session,session-cookies,magento-1.9,Php,Magento,Session,Session Cookies,Magento 1.9,我们试图在Magento中务实地设置客户会话。我们正在通过setCustomeraLoggeDin方法设置会话。但对于某些客户,它会继续加载/处理请求,并在最后显示“网关超时或连接超时”错误。这是一个随机的问题,并不是所有的客户都有 我们的Magento设置有3个网站B2B、B2E、B2C,我们只在B2B和B2E网站上面临这个问题。请查看下面的功能并提供可能的解决方案 $customer=Mage::getModel('customer/customer')->load($id); $se

我们试图在Magento中务实地设置客户会话。我们正在通过setCustomeraLoggeDin方法设置会话。但对于某些客户,它会继续加载/处理请求,并在最后显示“网关超时连接超时”错误。这是一个随机的问题,并不是所有的客户都有

我们的Magento设置有3个网站B2B、B2E、B2C,我们只在B2B和B2E网站上面临这个问题。请查看下面的功能并提供可能的解决方案

$customer=Mage::getModel('customer/customer')->load($id);
$session = Mage::getSingleton('customer/session');
$session->setCustomerAsLoggedIn($customer);
$this->_redirect();

不应直接将customer对象传递给会话,而应按如下方式传递:

$session = Mage::getSingleton('customer/session', array('name' => 'frontend'));
$session->login($email, $password);
$session->setCustomerAsLoggedIn($session->getCustomer());
因此,在登录完成后从会话传递客户对象

请尝试让我们知道这是否适合您

如果您只想通过电子邮件登录用户,您还可以尝试以下方法

$customer = Mage::getModel('customer/customer')->load($customerId);
if ($customer->getWebsiteId()) {
    Mage::init($customer->getWebsiteId(), 'website');
    $session = Mage::getSingleton('customer/session');
    $session->loginById($customerId);
    return $session;
}
您需要获取客户Id使用电子邮件第一上述工作,而且网站是关键

工作代码:

以下是我在演示站点上检查的工作代码:

include("app/Mage.php");
Mage::app();
$customer = Mage::getModel("customer/customer"); 
$customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId());
$customer->loadByEmail('testemail@123.org');
$customerId = $customer->getId();
Mage::init($customer->getWebsiteId(), 'website');
$session = Mage::getSingleton('customer/session');
$session->loginById($customerId);
return $session;
exit;

实际上,我们并没有向用户询问密码。我们只有基于电子邮件和OTP确认的登录系统。因此,我们只需在OTP确认后通过电子邮件加载客户,并在会话中设置客户对象。嗯,您可以尝试为用户设置一次网站,即$customer->setWebsiteId($websiteId);也更新了我的答案