当前位置: 首页 > 知识库问答 >
问题:

magento xmlrpc会话立即过期

谯德元
2023-03-14

首先;这个问题类似于另一个尚未解决的问题:对magento soap api的调用立即过期

我正在开发一个基于XMLRPC的客户端-服务器模块。基于Magento的服务器向基于Java的客户端公开了几个API方法。我在我的客户端中使用标准JavaXMLRPC Jars。

我有一个“登录”调用,用于检索会话。然后我把这个传给其他人做不同的电话。我检查了它是否返回(看起来)有效会话。

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

但是,我使用此会话进行的下一个调用失败:

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

我已经证实:

  • 将Magento中的会话超时设置为高值
    • 这不起作用
    • 是的
    • 是的
    • 见下文

    api_会话表

    • 这没有我的当前会话哈希
    • 它也只有11个条目;我至少登录了50次
    • 会话日志时间与选择当前_时间有很大差异
      • 更新:这无关紧要(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个答案

万阳嘉
2023-03-14

嗯。。。。这可能是因为我自己对安全的需要。

在上述失败中,我的登录方法借鉴了本文的技巧:在Java中不可挽回地破坏数据

就像那篇文章建议的那样,我将char数组传递给login方法。这最终导致将空凭据传递给登录方法。

对于那些可能不熟悉的人来说

  • 调用的登录方法在Mage/Api/Model/Server/Handler/Abstract.php
  • 这调用Mage/Api/Model/Session.php
  • 中的登录方法
  • 我将输入转储到日志中,它们是空的。

我继续使用我的常规、非安全方法,直接将字符串传递给该方法。成功了!

编辑:当然这有一个缺点,那就是我重新使用字符串而不是char[]数组。如果我知道怎么做,我会更新答案。

 类似资料:
  • 来自ZooKeeper服务器的日志:

  • 我有一个使用Spring安全LDAP的登录页面。身份验证本身工作正常。在我将表单从常规 HTML 更改为主要字体/ JSF 标记后,发生了此问题。用户通过身份验证后,该页不会重定向到索引页,而是在第二次尝试后。由于某种原因,会话被立即清除。我已经阅读了很多关于使用JSF登录的帖子和教程,以及类似的问题,但到目前为止,它们都没有奏效。 以下是我的一些配置: 登录.xhtml 在首字母/JSF之前 l

  • 问题内容: 经过反复试验,我将问题缩小到下面的第5行。由于某种原因,.js响应将结束用户会话。使用3.0.4并设计1.1.7(和jQuery 1.5)。 此外,@ organization正在更新,并且日志中将显示Completed 200 OK,因此用户不知道他/她已注销,直到尝试下一个操作为止。 任何帮助和指导,我们将不胜感激。 和 问题答案: 非常感谢Google Devise Group的

  • 问题内容: 我从某个地方得知一个分离的屏幕可以被杀死 可以从哪里获得[您想杀死的会话#] 但这是行不通的。哪里不对了?正确的方法是什么? 问题答案: “杀死”只会杀死一个屏幕窗口。要“杀死”整个会话,请使用。 例 对于无效会话,请使用:$ screen -wipe

  • 我在Tomcat7中有一个web应用程序,它将会话中的用户信息作为DTO对象保存。我还为我的项目启用了Spring Security性,如果用户没有会话,它会自动将用户重定向到登录页面。 如果我登录到应用程序一次,然后在Eclipse中重新启动Tomcat,会发生的情况是,我的会话被冲出,但cookie没有运行。 Edit:尽管Firefox说,但如果关闭并重新启动Firefox,cookie仍然

  • 我想问一下,为什么在执行事件时,我的状态没有改变。我已经搜索到需要在构造函数中绑定函数,但是状态仍然没有更新。 下面是我的代码: