magento xmlrpc会话立即到期

时间:2013-02-01 20:06:49

标签: java api magento session xml-rpc

首先;这个问题类似于另一个尚未解决的问题:call to magento soap api expires immediately

我正在研究基于XMLRPC的客户端 - 服务器模块。基于Magento的服务器有几个API方法暴露给基于Java的客户端。我在我的客户端使用标准的Java XMLRPC Jars。

我有一个“登录”调用来检索会话。然后我传递这个来做不同的电话。我检查了这会返回(看起来像什么)一个有效的会话。

Object result1 = client.execute("login", ob1);
session = (String) result1;

我使用此会话进行的下一次调用失败了:

org.apache.xmlrpc.XmlRpcException: Session expired. Try to relogin.

我已验证的内容:

  • 将Magento中的会话超时设置为较高值
    • 这不起作用
  • 验证服务器时间设置是否正常
    • 是。
  • 验证API用户在Magento中处于“活动状态”
    • 是的。
  • 检查api_session表中的会话哈希值
    • 见下文。

api_session表

  • 这没有我当前的会话哈希值。
  • 它只有11个条目;我至少登录了50次。
  • 会话日志时间与select CURRENT_TIME显着不同
    • 更新:这是无关紧要的(MySQL正在录制GMT)

以下是我看到的内容:

mysql> select * from api_session limit 50;
+---------+---------------------+----------------------------------+
| user_id | logdate             | sessid                           |
+---------+---------------------+----------------------------------+
|       5 | 2013-02-01 16:01:49 | 9099b50
|       5 | 2013-02-01 16:02:10 | 7312c1a
|       5 | 2013-02-01 16:05:43 | a6ce30c
+---------+---------------------+----------------------------------+
11 rows in set (0.00 sec)

mysql> select CURRENT_TIME;
+--------------+
| CURRENT_TIME |
+--------------+
| 14:58:03     |
+--------------+

1 个答案:

答案 0 :(得分:1)

嗯......这可能是由于我自己对安全的需要。

在上述失败中,我的登录方法接受了本文的提示:Irretrievably destroying data in Java

就像那篇文章所说,我正在将一个char数组传递给login方法。这最终导致将空凭据传递给login方法。

流向那些可能不熟悉的人是

  • 被调用的登录方法位于Mage/Api/Model/Server/Handler/Abstract.php
  • 这会调用Mage/Api/Model/Session.php
  • 中的登录方法
  • 我将输入信息转储到日志中,它们空了。

我回到使用我的常规,非安全的方法直接将字符串传递给方法。那很有效!

编辑:当然这有一个缺点,我回到使用字符串而不是char []数组。如果我弄清楚如何做到这一点,我会更新答案。