4

まず最初に; この質問は、まだ解決されていない別の質問に似ています: magento soap api への呼び出しはすぐに期限切れになります

私は XMLRPC ベースのクライアント サーバー モジュールに取り組んでいます。Magento ベースのサーバーには、Java ベースのクライアントに公開されるいくつかの API メソッドがあります。クライアントで標準の Java XMLRPC Jar を使用しています。

セッションを取得する「ログイン」呼び出しがあります。次に、これを渡して別の呼び出しを行います。これが(どのように見えるか)有効なセッションを返すことを確認しました。

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     |
+--------------+
4

1 に答える 1

1

うーん....これは、私自身のセキュリティの必要性によるものかもしれません。

上記の失敗では、私のログイン方法は次の記事からヒントを得ました: Java でデータを破棄する

その記事がアドバイスしたように、ログイン メソッドに char 配列を渡していました。これにより、最終的に空の資格情報がメソッドに渡されましたlogin

なじみのない方への流れは、

  • 呼び出されるログインメソッドはMage/Api/Model/Server/Handler/Abstract.php
  • これは login メソッドを呼び出しますMage/Api/Model/Session.php
  • 入力をログにダンプしたところ、空になりました。

メソッドに文字列を直接渡す、通常の安全でない方法を使用することに戻りました。それはうまくいきました!

編集: もちろん、これには、char[] 配列の代わりに文字列を使用することに戻っているという欠点があります。その方法がわかれば、回答を更新します。

于 2013-02-01T20:58:02.697 に答える