Magento会话在memcache打开时消失

时间:2011-12-07 21:09:20

标签: session magento cookies memcached

我们遇到了一个问题,即当我们启用了memcache时(在nginx Web服务器上),会话从Magento 1.10中随机消失。

我们在Magento中设置cookie到期时间似乎并不重要,因为某些原因,会话消失后的一小时内随机时间。

如果我们关闭memcache,它可以正常工作。

我们最终需要多个服务器连接到一个基于会话的缓存解决方案,因此memcache似乎是唯一的选择。此外,我们现在只在memcache中缓存会话,当我检查memcache统计数据时,我们远未达到阈值限制。

以下是local.xml中的内存缓存设置:

<cache>
    <type>memcached</type>
            <path/>
            <servers>
                <localhost>
                    <host><![CDATA[127.0.0.1]]></host>
                    <port><![CDATA[11211]]></port>
                    <persistent><![CDATA[1]]></persistent>
                </localhost>
            </servers>
</cache>
<session_save><![CDATA[memcache]]></session_save> <!-- db / memcache / empty=files -->
<session_save_path><![CDATA[tcp://localhost:11211?persistent=0&weight;=2&timeout;=10&retry;_interval=10]]></session_save_path>
<session_cache_limiter><![CDATA[private]]></session_cache_limiter>

这一切的难点在于,由于会话在一小时内清除,因此很难再现。有时它在一分钟之内,有时是45 ......

我们在这里有几个人在多个虚拟服务器系统中的所有不同浏览器中尝试(以消除冲突),并且他们似乎都清楚相同的时间。

现在逻辑会指出,有一个进程正在刷新内存缓存,但我不知道如何测试它,如果我这样做,如何告诉清除它的是什么。我查看了Magento代码,但是我找不到任何看起来像是清除它或从memcache中删除会话的东西。

我找到的是,会话结束后,“前端”cookie停留在浏览器上,当我检查内存缓存板时,cookie就消失了。

并非所有的键/值都从memcache中消失,在这种情况下只是其中的一部分。由于某种原因我和其他2或3人完全失踪了。

现在,我要问的不仅是有人遇到过这个问题,但有没有人对如何尝试提出任何其他想法?

我一直在使用(着名的)memcache.php文件来监控服务器上的memcache系统。我可以尝试其他任何想法/应用程序吗?

5 个答案:

答案 0 :(得分:2)

这可能是也可能不是你的问题,但它是我的。把它放在这里因为其他人可能觉得它很有用。

Memcached过期时间不超过30天(2592000秒)。显然,它会将日期以来的数字大于日期,并且会立即过期。

Magento的local.xml的session *元素设置了PHP环境变量。任何未在local.xml中设置的相关PHP环境变量都是从php.ini(或其他.ini。)中设置的。

所以:

在php.ini中,如果session.gc_maxlifetime设置在2592000以上,你将获得一个不工作的memcached。

因此,将php.ini中的行更改为以下内容:

session.gc_maxlifetime = 2592000

答案 1 :(得分:1)

关闭缓存并查看会话是否仍然消失。如果是这样,那么内容缓存会导致会话被刷新,在另一个端口上使用单独的memcache实例。

或者将session_save切换到db并一次性避免整个混乱。

答案 2 :(得分:0)

由于clockworkgeek建议Magento在刷新缓存存储时刷新会话。如果您使用的是独立(非群集)服务器,我建议您使用tempfs作为会话存储和缓存存储的内存缓存。当需要添加另一台服务器时,您应该在两者上运行memcache。那时你可以使用一个用于会话存储,另一个用于缓存存储。

答案 3 :(得分:0)

不确定这是否能解决您的问题:

<session_save_path>
     <![CDATA[tcp://localhost:11211?persistent=0&weight;=2&timeout;=10&retry;_interval=10]]>
</session_save_path>

您需要删除分号以确保使用指定的设置。

当memcached配置被Magento的社区论坛删除时,我倾向于看到这一点。

另一件事是你为memcached daemon分配了多少内存?

由于您网站上的流量,内存是否已用完。默认memcached安装没有任何更改,将内存大小设置为64MB。如果使用空间,它只是覆盖内存。并且你无法控制被丢弃的会话。

答案 4 :(得分:0)

问题是由未正确设置SSL密钥引起的