我可以使用下面的流行方法完美地访问 Magento 之外的现有 session 。
require 'app/Mage.php';
$mageRunCode = isset ( $_SERVER ['MAGE_RUN_CODE'] ) ? $_SERVER ['MAGE_RUN_CODE'] : '';
$mageRunType = isset ( $_SERVER ['MAGE_RUN_TYPE'] ) ? $_SERVER ['MAGE_RUN_TYPE'] : 'store';
$app = Mage::app ( $mageRunCode, $mageRunType );
Mage::getSingleton ( 'core/session', array ('name' => 'frontend' ) );
这很好用,但我实际上如何在 Magento 之外创建一个 Magento session 来填充 log_url、log_visitor 等表以及将访问者数据分配给 session ?
目前,用户直接从另一个网站到达我网站上的页面。此特定页面位于 Magento 外部,但我需要使用以下代码访问其访客 ID:
Mage::getSingleton ( 'log/visitor' )->getId()
如果用户之前访问过我的 Magento 商店,则此方法可以正常工作,但如果没有访问过,则它仅返回 bool 值 false。我想要做的是检查是否为访客 ID 设置了值,如果没有,请在 Magento 外部的第一页上创建访客,以便我可以在此页面上使用访客 ID。同样重要的是,一旦用户进入我的 Magento 商店,相同的访客 ID 将应用于我的目录的整个导航,即相同的 session 。有什么想法吗?
最佳答案
嗯,我已经明白了。尽管我必须承认这不是最干净的解决方案,但它的工作原理完全符合我的希望。对于其他想要这样做的人,我已将代码摘录粘贴在下面:
require 'app/Mage.php';
$mageRunCode = isset ( $_SERVER ['MAGE_RUN_CODE'] ) ? $_SERVER ['MAGE_RUN_CODE'] : '';
$mageRunType = isset ( $_SERVER ['MAGE_RUN_TYPE'] ) ? $_SERVER ['MAGE_RUN_TYPE'] : 'store';
$app = Mage::app ( $mageRunCode, $mageRunType );
$core_session = Mage::getSingleton ( 'core/session', array ('name' => 'frontend' ) );
$write = Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
$url = Mage::getUrl ( '*/*/*', array ('_current' => true ) );
Mage::getSingleton ( 'core/session' )->setLastUrl ( $url );
$visitor_id = $_SESSION ['core'] ['visitor_data'] ['visitor_id'];
if (! empty ( $visitor_id )) {
Mage::getSingleton ( 'log/visitor' )->setId ( $visitor_id );
} else {
Mage::getSingleton ( 'customer/session' )->setWishlistItemCount ( 0 );
Mage::getSingleton ( 'catalog/session' )->setCatalogCompareItemsCount ( 0 );
$write->query ( "INSERT INTO log_url_info (url, referer) VALUES (?, ?)", array ($url, Mage::helper ( 'core/http' )->getHttpReferer ( true ) ) );
$url_id = $write->lastInsertId ();
$log_visitor = Mage::getSingleton ( 'log/visitor' )->initServerData ()->setFirstVisitAt ( now () )->setIsNewVisitor ( true )->setLastVisitAt ( now () )->setLastUrlId ( $url_id )->save ();
$write->query ( "INSERT INTO log_url (url_id, visitor_id, visit_time) VALUES (?, ?, ?)", array ($url_id, $log_visitor->getId (), now () ) );
$core_session->setVisitorData ( $log_visitor->getData () );
$visitor_id = $log_visitor->getId ();
}
我希望这对其他人有帮助,这样他们就不会像我一样抓狂。
关于session - 如何在 Magento 之外创建 Magento session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9048180/