2013-02-01 65 views
4

首先;此問題類似於另一個尚未解決的問題:call to magento soap api expires immediatelymagento xmlrpc會話立即到期

我正在研究基於XMLRPC的客戶端 - 服務器模塊。基於Magento的服務器有幾個暴露給基於Java的客戶端的API方法。我在客戶端使用標準的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是在格林尼治標準時間記錄)

這是我所看到的:

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

嗯這可能是由於我自己的安全需要。

在上面的故障我的登錄方法把從這篇文章提示:Irretrievably destroying data in Java

像那篇文章建議,我經過一個字符數組的登錄方法。這最終導致空憑證被傳遞給login方法。

那些誰可能不熟悉流程是

  • 被調用的登錄方法是Mage/Api/Model/Server/Handler/Abstract.php
  • 這就要求在Mage/Api/Model/Session.php
  • 登錄方法我甩了投入日誌,他們來到空了。

我回去使用我的常規,非安全方法直接傳遞字符串到方法。這工作!

編輯:當然這有缺點,我回到使用字符串,而不是char []數組。如果我找出如何做到這一點,我會更新答案。

+0

請將您的問題標爲'已回答' – thaJeztah

+0

當然。我希望能找到如何將char []數組傳遞給XMLRPC調用(從而保持我之前的安全性)。這將不得不再過一天。 – Vish

+0

更新:從現在起2天后我可以接受我自己的答案。 – Vish