Вы можете получить массив всех ваших файлов cookie с помощью следующей команды:
Mage::getModel('core/cookie')->get();
Файл внешнего интерфейса можно получить следующим образом:
Mage::getModel('core/cookie')->get('frontend');
Из вашего прокомментированного кода я могувижу, что вы уже знали это.
Насколько я знаю, когда вы входите в систему, пользователь Magento не просто создает новый идентификатор сеанса, он использует идентификатор сеанса активного соединения (которое генерируется).самим PHP).Вы входите в систему пользователя и связываете его с сеансом, который ваш клиент API только что создал с Magento.Таким образом, код, который вы прокомментировали, кажется правильным для того, чего вы пытаетесь достичь.
Теперь вам просто нужно получить возвращенный идентификатор сеанса и использовать его в своем новом запросе в качестве файла cookie внешнего интерфейса..
Редактировать (второй раз)
В Magento разные сеансы внутри одного сеанса PHP, который он использует для разных областей.Например, есть основная область, область клиента и т. Д. Однако область клиента также специфична для данного веб-сайта.Таким образом, вы можете иметь область customer_website_one и customer_website_two.
Если вы хотите войти в систему своего пользователя, вы должны указать Magento, на каком веб-сайте это находится.Возьмите следующий код в качестве примера
// This code goes inside your Magento API class method
// These two lines get your website code for the website with id 1
// You can obviously simply hardcode the $code variable if you prefer
// It must obviously be the website code to which your users will be redirected in the end
$webSites = Mage::app()->getWebsites();
$code = $webSites[1]->getCode();
$session = Mage::getSingleton("customer/session"); // This initiates the PHP session
// The following line is the trick here. You simulate that you
// entered Magento through a website (instead of the API) so if you log in your user
// his info will be stored in the customer_your_website scope
$session->init('customer_' . $code);
$session->loginById(4); // Just logging in some example user
return session_id(); // this holds your session id
Если я правильно вас понимаю, вы теперь хотите разрешить пользователю открывать скрипт PHP на вашем сервере, который устанавливает для Magento Cookie то, что вы только что вернули в своем методе API,Я написал следующий пример, к которому вы будете обращаться следующим образом: example.com/set_cookie.php?session=THE_RETURNED_SESSION_ID
<?php
// Make sure you match the cookie path magento is setting
setcookie('frontend', $_GET['session'], 0, '/your/magento/cookie/path');
header('Location: http://example.com');
?>
Это должно сделать это.Ваш пользователь теперь вошел в систему (по крайней мере, я заставил его работать в моей тестовой среде).Одна вещь, которую вы должны иметь в виду, это то, что в Magento есть механизм проверки сессий, который не будет работать, если он включен.Это связано с тем, что в вашем сеансе хранится информация о том, какой браузер вы используете, IP-адрес, с которого вы подключаетесь и т. Д. Эти данные не будут совпадать между вызовами через методы API и браузером позже.Вот пример вывода команды print_r($session->getData())
после установки сеанса в методе API
[_session_validator_data] => Array
(
[remote_addr] => 172.20.1.1
[http_via] =>
[http_x_forwarded_for] =>
[http_user_agent] => PHP-SOAP/5.3.5
)
Убедитесь, что вы выключили проверку в Magento Admin в Настройках> Конфигурация> Общие> Веб> Проверка сеансаНастройки