Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 如何在根索引文件中获取magento客户会话值以切换存储视图_Session_Magento_Multisite - Fatal编程技术网

Session 如何在根索引文件中获取magento客户会话值以切换存储视图

Session 如何在根索引文件中获取magento客户会话值以切换存储视图,session,magento,multisite,Session,Magento,Multisite,我已经为运行在magento 1.9.2下的magento网站创建了2个商店视图,我需要为这两个网站使用相同的域名。当客户登录时,我需要将store视图更改为第二个视图。我需要检查根目录中index.php文件中的客户会话。但是,当我对index.php进行以下更改时,最终会出现一个错误 $store_id = 1; //Check customer session here if(Mage::getSingleton('customer/session')->isLoggedIn())

我已经为运行在magento 1.9.2下的magento网站创建了2个商店视图,我需要为这两个网站使用相同的域名。当客户登录时,我需要将store视图更改为第二个视图。我需要检查根目录中index.php文件中的客户会话。但是,当我对index.php进行以下更改时,最终会出现一个错误

$store_id = 1;
//Check customer session here 
if(Mage::getSingleton('customer/session')->isLoggedIn()){ // Error occurs here
    $customer       = Mage::getModel('customer/session')->getCustomer();            
    $customerId     = $customer->getId(); 
    // $storeid  get logged in customer storeid may from customer custom attribute value added on admin edit form
    // $store_id value get changed here
}



Mage::app()->setCurrentStore($store_id);
umask(0);
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

if($store_id == 2)
$mageRunCode = 'mysecondshop';

Mage::run($mageRunCode, $mageRunType);

当我检查这个问题时,我发现我们不能在Mage::run之前使用Mage::getSingleton,但是对于我目前在商店之间切换的情况,我需要在Mage run之前登录用户详细信息。有什么方法可以满足我的要求吗?

在magento中,除非初始化Mage::run,否则无法检查会话数据。我们需要做一些像cookie这样的临时存储来实现这一点。希望下面的步骤能使它起作用

使用observer创建一个自定义模块,用于保存、清除和检查cookie。下面给出了您的config.xml文件

<!--------------------------------------------------------------------->
<customer_login>
  <observers>
    <Company_Modulename_model_customer_login>
      <class>Company_Modulename_Model_Observer</class>
      <method>afterCustomerLoggedIn</method>
    </Company_Modulename_model_customer_login>
  </observers>
</customer_login>
<customer_logout>
  <observers>
    <Company_Modulename_model_customer_logout>
      <class>Company_Modulename_Model_Observer</class>
      <method>afterCustomerLoggedOut</method>
    </Company_Modulename_model_customer_logout>
  </observers>
</customer_logout>
<controller_action_layout_load_before>
  <observers>
    <Company_Modulename_model_layoutload_observer>
      <class>Company_Modulename_Model_Observer</class>
      <method>beforeLoadLayout</method>
    </Company_Modulename_model_layoutload_observer>
  </observers>
</controller_action_layout_load_before>
<!--------------------------------------------------------------------->
public function afterCustomerLoggedIn(Varien_Event_Observer $observer)
{
    $customer = $observer->getCustomer();
    $cid      = $customer->getid();
    $webId    = $customer->getWebsiteId();
    Mage::getModel('core/cookie')->set('_storeuid',$cid, 60*60*24*1);  // Create cookie
    Mage::getModel('core/cookie')->set('_storeid',$webId, 60*60*24*1); // Create cookie

}


public function afterCustomerLoggedOut(Varien_Event_Observer $observer)
{
    $customer = $observer->getCustomer();
    $cid      = $customer->getid();
    $webId    = $customer->getWebsiteId();  
    Mage::getModel('core/cookie')->set('_storeuid','0', 1); // Clear cookie
    Mage::getModel('core/cookie')->set('_storeid','0', 1);  // Clear cookie

}
在呈现页面之前

public function beforeLoadLayout(Varien_Event_Observer $observer)
{


    $cookieValue = Mage::getModel('core/cookie')->get('_storeuid');
    $baseurl = Mage::getBaseUrl();

    if(Mage::getSingleton('customer/session')->isLoggedIn()){ // For more security , if someone change the cookie value


        $customer = Mage::getModel('customer/session')->getCustomer();          
        $webId    = $customer->getWebsiteId();
        $cid      = $customer->getId();

        if( $cookieValue != $cid ){

                Mage::getModel('core/cookie')->set('_storeuid',$cid, 60*60*24*1);
                Mage::getModel('core/cookie')->set('_storeid',$webId, 60*60*24*1);
                header("Location: ".$baseurl); exit;

       }
    }else{

        if( (isset($cookieValue)) && ($cookieValue > 0)  ){ // Clear cookie if session is cleared

            Mage::getModel('core/cookie')->set('_storeuid','0', 1);
            Mage::getModel('core/cookie')->set('_storeid','0', 1);
            header("Location: ".$baseurl); exit;

        }

    }
}
最后,在index.php中,您可以检查cookie以切换loggedin客户的存储值

$store_id = 1;
if( (isset($_COOKIE['_storeur'])) && ($_COOKIE['_storeur'] > 0)  ){
    $store_id = $_COOKIE['_storeur'];
}

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

if($store_id == 2 ) $mageRunCode = 'store2';
if($store_id == 3 ) $mageRunCode = 'store3';
//....................
Mage::run($mageRunCode, $mageRunType);

这正是我需要的:)