【问题标题】:Magento can't recognize memcached php sessionsMagento 无法识别 memcached php 会话
【发布时间】:2012-02-28 19:29:19
【问题描述】:

我正在开发一个 magento 部署,主要目标是简化产品创建。 基本上我们在后端有一些非常耗时的调用,它们应该异步运行,以便用户可以继续工作。

  • 我的第一个尝试是使用AJAX 将数据发布到耗时的脚本并通过javascript 重新定位用户。

这有点工作,但 magento 会话似乎依赖于 php 会话——据我所知,用户将在php.ini 指定的目录中创建一个会话,并在magento/var/session 中创建一个会话。

由于这个 php 会话是基于文件的,我将无法在第二个请求(重定向)或第一次调用之前同一会话中的任何其他请求(ajax 调用的脚本)中从服务器获得任何响应已完成。

  • 我对此的解决方案是对这些会话文件(与 magento 一起)进行内存缓存,以允许这些异步调用。

但是,magento 似乎无法识别这些会话,因为它们存储在 memcache 中。

这是为什么?

我认为它在访问这些会话时使用了标准的 php 函数——虽然我在源代码中找不到任何这些函数,但它们必须以某种方式调用。

我已成功测试会话可以正确存储和加载。 我没有收到任何错误消息,并且日志为空。

任何想法为什么 magento 不能处理这个?

为了实现这些异步调用,它甚至是一种可接受的方法,还是有更好的解决方案?

TL;DR 使用 memcache 存储标准 php 会话。 Magento 似乎无法识别它们。这是为什么呢?

【问题讨论】:

    标签: php session magento memcached


    【解决方案1】:

    听起来您的app/etc/local.xml 文件中没有定义memcached。它应该看起来像这样:

    <session_save><![CDATA[memcache]]></session_save>
    <session_save_path><![CDATA[tcp://xxx.xxx.xxx.xxx:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>
    

    xxx.xxx.xxx.xxx 替换为您的内存缓存服务器地址。

    【讨论】:

    • 感谢您的回复。然而,情况并非如此。我的 local.xml 文件中有这个确切的代码,它使 magento 自己的会话 memcached - 这确实有效。例如,我可以将 mangento 自己的会话 memcached 和 php 的会话保存为文件 - 这很有效。当我对 php 会话进行内存缓存时,就会出现问题。基本上每个会话有两个不同的会话(有意义吗?)使用文件结构,它可能看起来像这样: /web/tmp/[php sessions, path described in php.ini] /web/www/magento/temp/sessions /[magento 会话,config.xml 中的路径]
    • FTR 我正在 wamp 中测试这个。
    • 你做错了什么。您应该在通过 ajax 调用的自定义 php 脚本中重用 magento 会话。
    【解决方案2】:

    所以这很尴尬..不用说,当我今天早上重新启动它进行测试时,它就可以工作了。也许必须重新启动 memcache 服务?没有像我希望的那样解决我最初关于异步调用的问题,但那是另一回事了。 :D 美好的一天

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 2012-08-03
      • 2013-10-17
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多