0

以下のコードを使用して、製品をカートに追加する前にユーザーを Magento に自動的にログインさせます。

場合によっては、以下のコードは機能しますが、ログインが「固定」されていないため、商品がカートに追加されません。セッションが問題のようです。長時間再起動せずに Web サーバーを稼働させたままにしておくと、Magento は作成したセッションを「忘れる」ように見え、製品がカートに何も追加しないため、以下のコードは失敗します。

// This call is actually in a class called Login_model, function called dual_login
// It is shown below.
$lm = new Login_model();
$ret = $lm ->dual_login($Username, $Password);
if ($ret['result'] = 'SUCCESS') {
    $product_id = Mage::getModel("catalog/product") -> getIdBySku("$sku");
    $product = Mage::getModel("catalog/product") -> load($product_id);          
    $session = Mage::getSingleton("core/session", array("name" => "frontend"));
    $cart = Mage::helper("checkout/cart") -> getCart();
    $cart -> addProduct($product, 1);
    $session -> setLastAddedProductId($product -> getId());
    $session -> setCartWasUpdated(true);
    $cart -> save();          
    $cart_url = $site_url_https . "store/checkout/cart";
    header("Location: " . $cart_url);
}

// 
// dual_login code below
// 
Mage::getSingleton('core/session', array('name'=>'frontend'));
$customer = Mage::getModel('customer/customer');
$customer->setWebsiteId(Mage::app()->getWebsite()->getId());
$customer->loadByEmail($Email);
$session = Mage::getSingleton('customer/session');
$session->login($Email,$Password);
$session->setCustomerAsLoggedIn($session->getCustomer());
// 
// How can I determine here if the login was actually successful
// and the product can be added to the cart?
// 
$ret['result'] = 'SUCCESS';

$session->isLoggedIn() への呼び出しを追加すると、true が返されますが、製品はまだカートに追加されていません。

Magento がこれを行う原因は何ですか?また、それをテストして、それが発生していることを通知するにはどうすればよいですか?

4

1 に答える 1

1

コードからの唯一の手がかりは、顧客モデルにデータを入力していることですが、それを使用してセッション シングルトンにデータを入力していないことです。本当にやるべきか

$session->setCustomerAsLoggedIn($session->getCustomer());

ではない

$session->setCustomerAsLoggedIn($customer);

?

于 2012-10-26T15:23:45.663 に答える