session - 如何在 Magento 之外创建 Magento session ?

标签 session magento logging visitor-pattern

我可以使用下面的流行方法完美地访问 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/

相关文章:

php - 对 cookie 进行编码,使其不会被欺骗或读取等

java - Spring MVC @SessionAttributes 困惑!

javascript - Magento 自定义选项不起作用

java - Log4J dailyrolling fileappender,控制滚动文件名

python - 如何防止模块级日志记录功能破坏我的记录器?

php - Facebook:如何在页面之间传递信息

node.js - Express 和 Redis - 如果该用户存在 session ,则不允许访问

magento - 通知 : Undefined offset: 2 in vendor\magento\framework\Encryption\Encryptor. php

php - 为 magento 创建产品矩阵

python:logging.Logger 和 logging.getLogger 之间的区别