我们正试图在Magento中务实地设置客户会话。我们通过 setCustomerAsLoggedIn 方法设置会话。但对于某些客户,它会继续加载/处理请求,最后会显示“网关超时或连接超时”错误。它的随机问题并非适用于所有客户。
我们的Magento设置有3个网站B2B,B2E,B2C,我们只针对B2B和B2E网站面临此问题。请查看以下功能并提供可能的解决方案。
$customer=Mage::getModel('customer/customer')->load($id);
$session = Mage::getSingleton('customer/session');
$session->setCustomerAsLoggedIn($customer);
$this->_redirect();
答案 0 :(得分:0)
不应直接将客户对象传递给会话,而应传递如下:
$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;