从外部脚本中的Magento登录用户ID - 多会话问题?

时间:2014-09-08 14:28:34

标签: magento session

我可以像这样成功登录用户,

// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();

// Log in user
$session = Mage::getSingleton('customer/session', array('name' => 'frontend'));
$session->login($username, $password);
$session->setCustomerAsLoggedIn($session->getCustomer());

// redirect with session ID
header('Location: https://www.domain.com/?SID='.$session->getEncryptedSessionId());
exit;

然后我可以获得我需要的任何用户数据,

// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();

if(Mage::getSingleton('customer/session')->isLoggedIn())
  echo Mage::getSingleton('customer/session')->getId();
else
  echo 'Not logged in';

问题是上面的代码块在用户通过网站上的表单登录时返回“未登录”,而不是使用第一个块中的代码登录。

两个登录方法似乎创建了可以并行运行的单独会话。如果用户X使用站点的内置表单登录,然后用户Y使用我的代码登录 - 两个用户都登录。商店说,欢迎用户X,但我的代码返回用户Y的ID。

关于发生了什么的任何想法?我需要用户能够以任一方式登录,但需要能够获取他们的ID。

2 个答案:

答案 0 :(得分:0)

//在该控制器中创建新控制器创建函数,例如IndexController.php

<强> abc.com/modulename/index/customLogin

public function customLoginAction()
{
if(Mage::getSingleton('customer/session')->isLoggedIn())
   echo Mage::getSingleton('customer/session')->getId();
else{
    echo 'Not logged in';
    $email = 'abc@gmail.com'
    $customer = Mage::getModel('customer/customer');
    $customer->setWebsiteId(Mage::app()->getWebsite()->getId());
    $customer->loadByEmail(trim($email));
    Mage::getSingleton('customer/session')->loginById($customer->getId());
    echo $customer->getId();
  }
}

答案 1 :(得分:0)

我还没有100%清楚发生了什么,但我已经解决了问题 - 我做了两处改变。

Magento Admin&gt;系统&gt;配置&gt;一般&gt;网络&gt;会话Cookie管理我将 Cookie路径设置为 /

在我包含Magento应用程序的文件中,我添加了一行代码

// Include Magento application
require_once ('../store/app/Mage.php');
umask(0);
Mage::app();
Mage::getSingleton('core/session', array('name'=>'frontend')); // <- NEW LINE
// ... and so on ...

现在,无论用户如何登录,我的外部代码和商店都同意谁登录。

我可以看到改变cookie路径是如何帮助的,但是如果有人有任何解释为什么额外的代码行有效,那将是值得赞赏的。

干杯!