Magento API:如何按ID加载客户会话

时间:2015-02-16 16:28:44

标签: php api magento

我正在使用magento模块使用API​​登录客户。

我可以登录客户并获得前端sessionId, 但是当我想加载这个sessionId的会话以检查客户是否已经登录时我不能。

这里是我使用的API函数:

public function login($email,$password,$storecode){
    $result = array();
    $result['code'] = '';
    $result['messages'] =  '';
    try{
        $session = Mage::getSingleton('customers/session');
        $storemodel = Mage::getModel('core/store')->load($storecode);
        $store_id = $storemodel->getId();
        $websiteId = $storemodel->getWebsiteId();
        if($session->loginByApi($email, $password,$websiteId)){
            $result['code'] = 'SUCCESS';
            $result['sessionId'] = $session->getSessionId();
            $customer = $session->getCustomer();
            $result['customer']= array(
                'customerid' => $customer->getId(),
                'firstname' => $customer->getFirstname(),
                'lastname' => $customer->getLastname(),
            );
        }
    } catch (Mage_Core_Exception $e) {
        $result['code'] = 'ERRORS';
        $result['messages'] =  $e->getMessage();
    }
    return $result;
}

public function isloggedin($customerId,$customersessionId ,$storecode){
    if(!isset($storecode)){
        $storecode = 'default';
    }

    Mage::app($storecode, 'store');

    $core_session = Mage::getSingleton('core/session', array('name'=>'frontend'));
    if($customersessionId != null){
        $core_session->setSessionId($customersessionId);
        $core_session->start('frontend');
    }

    $session = Mage::getSingleton('customer/session', array('name'=>'frontend'));

    $customer = Mage::getModel('customer/customer')->load($customerId);
    $session->setCustomer($customer);


   if($session->isLoggedIn()){
        $session->setCustomerAsLoggedIn($customer);
        $result['sessionId'] = $session->getSessionId();
    }else{
        $result['logged'] = false;
    }
    return $result;

}

有人有想法吗?

2 个答案:

答案 0 :(得分:0)

不确定这是否有用,但是这段代码:

Mage::app('2', 'store');
$s = Mage::getSingleton('customer/session', array('name'=>'frontend'));
$c = Mage::getModel('customer/customer')->load(1);
$s->setCustomer($c);

if($s->isLoggedIn()){
    echo $c->getName()." is logged in, session: ".$s->getSessionId().PHP_EOL;
} else {
    echo "not logged in".PHP_EOL;
}

似乎对我有用:

John Smith is logged in, session: d3rcgvd56md4u3cfctcvnt2ou6

答案 1 :(得分:0)

如果您有会话ID,您可以通过以下调用核心会话单例来获取数据:

$sessId = 'sn1q4ndvr1kieumsmplhd39n83';
$sess = Mage::getSingleton('core/session', array( 'value' => $sessId ));

这将为任何登录或未登录的用户检索会话。从那里,您可以确定会话是否属于客户,并检查客户对象:

$sessionCustomerId = $sess->getCustomer()->getId();

if ( $sessionCustomerId ) {
    // yay, they are a customer!
    echo $sessionCustomerId;
}

希望有所帮助。

修改

您可以使用Mage::getSingleton('core/session')->getEncryptedSessionId()

从核心会话中获取会话ID(以鸡蛋和鸡蛋的方式)