为什么 Magento 在使用 customer/session 后删除了我的前端 cookie?
Why does Magento remove my frontend cookie after using customer/session?
我正在使用 Nginx 和 HHVM,我还使用自定义 php 文件与 Magento 交互。
当我 运行 任何 PHP 文件时,前端 cookie 设置正确,购物车也正常工作。
然而,每当我使用:
$session = Mage::getSingleton( 'customer/session' );
$session->login($login, $pass);
$session->setCustomerAsLoggedIn($customer);
前端 cookie 被删除。
问题:为什么会这样,我该如何解决?
设置:
完整示例:
include_once('../app/Mage.php');
ob_start();
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend'));
$login = $v[0]; //username as email
$pass = $v[1]; //user password
try {
$customer = Mage::getModel("customer/customer");
$customer->website_id = Mage::app()->getWebsite()->getId();
$customer->loadByEmail($login);
$session = Mage::getSingleton( 'customer/session' );
$session->login($login, $pass);
$session->setCustomerAsLoggedIn($customer);
} catch(Exception $e) {
$returnJson['success'] = false;
$returnJson['error'] = $e;
}
可能不相关,但为什么在登录之前就加载客户,而你从不检查登录功能 returns 是真还是假。您还可以手动将客户设置为已登录,如果 user/pass 正确,这将在 login() 函数内为您执行。我基本上会将整个 try..catch 部分更改为:
try {
$session = Mage::getSingleton( 'customer/session' );
if (!$session->login($login, $pass)) {
throw new Exception("Authentication failed");
}
$customer = $session->getCustomer();
// more stuff?
} catch(Exception $e) {
$returnJson['success'] = false;
$returnJson['error'] = $e;
}
显然不是 tested/proofread 出于懒惰的原因。 :)
我们通过添加 HHVM ini 设置解决了这个问题:
hhvm.server.allow_duplicate_cookies = 0
我正在使用 Nginx 和 HHVM,我还使用自定义 php 文件与 Magento 交互。
当我 运行 任何 PHP 文件时,前端 cookie 设置正确,购物车也正常工作。
然而,每当我使用:
$session = Mage::getSingleton( 'customer/session' );
$session->login($login, $pass);
$session->setCustomerAsLoggedIn($customer);
前端 cookie 被删除。
问题:为什么会这样,我该如何解决?
设置:
完整示例:
include_once('../app/Mage.php');
ob_start();
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend'));
$login = $v[0]; //username as email
$pass = $v[1]; //user password
try {
$customer = Mage::getModel("customer/customer");
$customer->website_id = Mage::app()->getWebsite()->getId();
$customer->loadByEmail($login);
$session = Mage::getSingleton( 'customer/session' );
$session->login($login, $pass);
$session->setCustomerAsLoggedIn($customer);
} catch(Exception $e) {
$returnJson['success'] = false;
$returnJson['error'] = $e;
}
可能不相关,但为什么在登录之前就加载客户,而你从不检查登录功能 returns 是真还是假。您还可以手动将客户设置为已登录,如果 user/pass 正确,这将在 login() 函数内为您执行。我基本上会将整个 try..catch 部分更改为:
try {
$session = Mage::getSingleton( 'customer/session' );
if (!$session->login($login, $pass)) {
throw new Exception("Authentication failed");
}
$customer = $session->getCustomer();
// more stuff?
} catch(Exception $e) {
$returnJson['success'] = false;
$returnJson['error'] = $e;
}
显然不是 tested/proofread 出于懒惰的原因。 :)
我们通过添加 HHVM ini 设置解决了这个问题:
hhvm.server.allow_duplicate_cookies = 0