什么会导致redis保留旧密钥?

时间:2014-11-26 19:02:08

标签: magento redis

我们正在安装Magento Enterprise,它内置支持将Redis用作会话处理程序。

对于上下文:我们使用实施PayPal付款方式的模块作为我们用户的选项。

该模块会生成一个包含PayPal表单的灯箱,这样就不必将用户重定向到页面之外。

为此,我们必须生成一个令牌,并将其保存到会话中。灯箱在PayPal页面中加载URL参数中的令牌。

当用户填写表单时,用户将被重定向到URL中具有相同令牌的确认订单页面。

URL令牌必须与会话令牌匹配,否则进程失败。

当我们禁用redis并使用普通文件会话(我们在生产环境中无法做到)时,这很正常。

以下是我们无法理解的内容:

当我们使用带断点的xdebug逐步执行代码时,我们看到在redis中的会话中设置了令牌。付款处理工作正常。

当我们没有单步执行代码时,由于令牌不匹配而导致进程失败,并且当我们在整个过程中检查令牌密钥时,它最初正确设置它,然后最后,令牌是我们看到的是几个会话前设置的令牌。

会话密钥上的TTL是24分钟,但不认为这应该是一个问题,因为它应该覆盖该值。当我们使用断点暂停整个过程时,不确定为什么它能正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

它是标准的Magento PayPal模块吗?

我的第一个想法是,其他东西正在将一个对象存储到redis(它不应该这样做),后来的请求会收到一个缓存的值,因为这个对象是缓存的。

也许做一个简单的测试:

  1. 清除redis缓存
  2. 下订单并前往PayPal
  3. 此时一切正常吗?
  4. 检查存储在Redis中的令牌以获取此特定会话并将其写下来
  5. 下订单&进入Pay​​pal
  6. 验证收到的令牌是否与前一个令牌相同