如何在 Magento 之外创建 Magento 会话? [英] How do I create a Magento session outside of Magento?

查看:28
本文介绍了如何在 Magento 之外创建 Magento 会话?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用下面的流行方法完美地访问 Magento 之外的现有会话.

require 'app/Mage.php';$mageRunCode = isset ( $_SERVER ['MAGE_RUN_CODE'] ) ?$_SERVER ['MAGE_RUN_CODE'] : '';$mageRunType = isset ( $_SERVER ['MAGE_RUN_TYPE'] ) ?$_SERVER ['MAGE_RUN_TYPE'] : '商店';$app = Mage::app ( $mageRunCode, $mageRunType );Mage::getSingleton ('core/session', array ('name' => 'frontend'));

这很好用,但我如何在 Magento 之外实际创建一个 Magento 会话来填充 log_url、log_visitor 等表并将访问者数据分配给会话?>

目前,用户直接从另一个网站访问我网站上的页面.此特定页面位于 Magento 外部,但我需要使用以下代码访问他们的访客 ID:

Mage::getSingleton ('log/visitor')->getId()

如果用户以前去过我的 Magento 商店,这可以正常工作,但如果没有,它只会返回一个布尔值 false.我想要做的是检查是否有为访客 ID 设置的值,如果没有,请在 Magento 之外的第一页上创建访客,以便我可以在此页面上使用访客 ID.同样重要的是,一旦用户进入我的 Magento 商店,相同的访客 ID 将应用于他们对我的目录的整个导航,即同一个会话.有什么想法吗?

解决方案

好吧,我想通了.尽管我必须承认这不是最干净的解决方案,但它的工作原理与我希望的完全一样.对于其他想要这样做的人,我已将我的代码摘录粘贴在下面:

require 'app/Mage.php';$mageRunCode = isset ( $_SERVER ['MAGE_RUN_CODE'] ) ?$_SERVER ['MAGE_RUN_CODE'] : '';$mageRunType = isset ( $_SERVER ['MAGE_RUN_TYPE'] ) ?$_SERVER ['MAGE_RUN_TYPE'] : '商店';$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'];如果(!空($visitor_id)){Mage::getSingleton ('log/visitor')->setId ($visitor_id);} 别的 {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();}

我希望这能帮助其他人,这样他们就不会像我一样把头发扯掉了.

I am able to access an existing session outside of Magento perfectly fine using the popular method below.

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' ) );

This works great, but how do I actually create a Magento session outside of Magento that would populate the log_url, log_visitor, etc. tables as well as assigning the visitor data to the session?

Currently, the user arrives at a page on my site directly from another website. This specific page is outside of Magento but I need to access their Visitor ID using the following code:

Mage::getSingleton ( 'log/visitor' )->getId()

This works fine if the user has previously been to my Magento store, but if not, it just returns a boolean false. What I would like to do is check to see if there is a value set for the Visitor ID and if not, create the visitor on this first page which is outside of Magento so I can use the Visitor ID right on this page. It is also important that as soon as the user enters my Magento store, the same Visitor ID will be applied throughout their navigation of my catalog, i.e. the same session. Any ideas?

解决方案

Well, I've figured it out. Although I must admit it's not the cleanest solution, it works exactly as I had hoped. For anyone else who's looking to do this, I've pasted my code excerpt below:

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 ();
}

I hope this helps someone else so they're not ripping their hair out like I was.

这篇关于如何在 Magento 之外创建 Magento 会话?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆