17

Magento セッションを使用して顧客セッションをトレースしたいのですが、上記の 3 つのセッション タイプ間のリンクが見つかりませんでした。

これらの 3 つのタイプの主な違いは何ですか?

Magento に 1 つではなく 3 つのセッション タイプがあるのはなぜですか?

そして、それらはどのように結びつけられているのでしょうか?

4

2 に答える 2

36

コア/セッション

これは最も基本的なセッションです。訪問者に関する基本的な「匿名」データ (Cookie、IP アドレス、エラー メッセージ) を提供します。

Mage_Core_Model_Session::getCookie()
Mage_Core_Model_Session::addMessage()
Mage_Core_Model_Session::useValidateRemoteAddr()

顧客/セッション

このオブジェクトは、特定の顧客 (ログインまたはログアウト、名前、ID、電子メール、顧客のグループ) に関連するものを処理します。

Mage_Customer_Model_Session::getCustomerId()
Mage_Customer_Model_Session::isLoggedIn()
Mage_Customer_Model_Session::getCustomerGroupId()

チェックアウト/セッション

これには、見積もり、ゲストかどうかに関連する情報が保存されます (カートの合計、アイテム、チェックアウトの進行状況)

Mage_Checkout_Model_Session::getQuote()
Mage_Checkout_Model_Session::setStepData()
Mage_Checkout_Model_Session::getQuote()->getTotals()

各セッション モデルは から拡張されたものMage_Core_Model_Session_Abstractで、異なる機能を提供するだけです。することはあまりありませんcore/session。その機能のほとんどは、すべてが共有する親クラスから継承されます。

customer/sessionをさまざまな方法でに関連付けることができますcheckout/session

例えば

Mage::getSingleton('checkout/session')
    ->setCustomer(Mage::getSingleton('customer/session')->getCustomer());

PS忘れないでくださいadminhtml/session

于 2013-07-09T04:31:36.780 に答える
8

Magento は、グループ化を導入して、対応するものと区別するさまざまな用途のセッション データを管理します。詳細を掘り下げてみましょう。Magento のすべてのセッション データは$_SESSION、プログラミング ビューの配列であるグローバル変数に格納され、セッション クラスによってカプセル化された配列によって表される各グループで、それらを独立したグループに分類します。

Magento にはデフォルトで、core、customer、および checkout の 3 つのセッション クラスが装備されています。

Mage::getSingelton('core/session')Mage::getSingleton('customer/session')Mage::getSingleton('checkout/session')は、Magento で使用される 3 つのセッション関数です。 $_SESSION変数は最終的に次の形式になります。

$_SESSION=array('core'=>array(...), 'customer'=>array(...), 'checkout'=>array(...),...);

変数を直接操作することは避け$_SESSION、代わりに や のように Magento のやり方で行動する必要がMage::getSingleton('core/session')-getXXX()ありMage::getSingleton('core/session')->setXXX()ます。

カスタマイズされたセッション クラスが必要な場合は、継承する必要がありMage_Core_Model_Session_Abstractます。以下に例を示します。

class Company_Module_Model_Session extends Mage_Core_Model_Session_Abstract
{
    public function __construct() {
        $this->init('module');
    }
}

そしてMage::getSingleton('mgwishlist/session')、Magento の他のセッション クラスと同様に、 を呼び出すことで、このカスタマイズされたセッション クラスを使用できます。

int特に PHP セッションは、bool、、 などの基本的なデータ型の値しか保持できないため、stringシリアライズ/デシリアライズは頻繁に行われます。

于 2013-07-09T06:33:01.187 に答える