我有一个客户的magento会话文件正在迅速失控。我们每周清洗一次,但似乎可能需要更频繁。
1)这些文件有什么作用?它们如何与用户在线体验相关联(例如,如果我删除它们并且用户仍在网站上,它们将如何受到影响)
2)我多久可以删除它们?这些文件真的需要在服务器上保留多长时间?
克里斯
答案 0 :(得分:9)
使用基于文件的会话,它们将由PHP会话清理cron自动修剪 - 因此文件很可能在创建后约7200秒内被删除。因此,即使在一个繁忙的站点(每天30k uniques),在./var/session中通常只有大约4,000个会话文件 - 这对于Linux服务器来说是没有的。
但是,清理实际上依赖于cron工作 - 它通常不会出现在Magento的./var/session目录中。所以你应该建立一个新的系统cron
/usr/bin/find /home/myuser/public_html/var/session -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 -exec rm {} \; >/dev/null 2>&1
会话的默认清理时间是7200秒,这应该绰绰有余,尽管您可以更改以上内容以适应。
使用Memcache会话,TCP / IP是唯一的开销 - 对于单服务器部署而言,它会比基于文件的速度慢。那么,您将使用unix套接字,这将消除该开销并提供更好的安全性。但即便如此,您的客户会话将被截断/限制您可以分配的RAM量。平均Magento会话是4Kb - 因此您将能够支持256个活动会话,每MB您分配。因此,请务必设置适当的限制,以避免客户随意丢失购物车/会话。还要记住,Memcache守护进程重启将消灭所有现有会话(坏!)。
使用Redis(不是原生的,但通过扩展可用),您获得与Memcache类似的支持级别,但具有持久性的额外好处(如果您希望使用它)。使用Cm_Redis扩展,您还可以利用会话压缩。我们发现这个扩展在CE和EE部署上都能很好地工作。
使用DB,默认的剪枝过期设置是一个强大的1周,所以以上面的商店大小为例(每天30k uniques),你将看到一个大约7GB的core_cache_session的数据库表大小 - 几乎每个基于会话的操作都会使你的商店彻底停止。
从托管大型(每天230k独立访问者)和小型(每天<1k独立访问者)商店的经验来看,我们的建议是:
单服务器部署 - 文件
多服务器部署 - Redis(使用主Magento缓存中的单独数据库)
我在这里写了一些非常详尽的回复http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
答案 1 :(得分:7)
每个文件都是一个人的会话, 的持续时间不应超过session.gc_maxlifetime
秒 - 垃圾收集 - 在服务器的php.ini文件中设置或在.htaccess文件中重写。降低此值意味着会话累积的次数减少。
Magento还有另一个关于会话的技巧;在/app/etc/local.xml
文件中,session_save
值可以更改为db
,这意味着将使用数据库而不是文件,但仍将遵守上述垃圾收集器生命周期。如果您已设置了memcache
,也可以指定/app/etc/local.xml.additional
(请参阅{{1}})。如果服务器是集群,则两者都非常有用。
答案 2 :(得分:2)
取决于您的会话生命周期,如果会话保持用户保持登录状态,或者他的首选项在再次访问商店时保持不变。您可以按照自己喜欢的方式清除它们,但请记住它会为您登录时所有登录的用户注销/清除购物车
答案 3 :(得分:2)
不要忘记查看系统的哪个部分在会话中不正确地存储不合理数量的数据以实际解决问题。更快地清理会议只是暂时的解决方案。
会话文件应始终保持较小。可能的情况是,某些脚本在会话中存储了大量不适当的数据以“效率”并导致问题。
几乎可以肯定,对象存储在会话中会导致此问题。 Magento中的一个常见模式是将对象数据链接起来:
$product->
'attr1' => 'somevalue',
...
'categories' => array(
'products' => array(
<and so on and so forth>
),
),
将对象放入会话中可能会无意中包含这些巨大的对象链,从而存储大量无关数据。如果可能,仅在会话中存储字符串/数字数据,例如产品的ID数组,而不是产品本身。
答案 4 :(得分:0)
我也让他们堆积起来,所以我添加了一个cron作业以下......(这是来自我的php.ini文件中的说明..正好在“session.gc_maxlifetime = 1440”设置下)
例如,以下脚本相当于 ;将session.gc_maxlifetime设置为1440(1440秒= 24分钟): ; find / path / to / sessions -cmin +24 | xargs rm