Magento会话文件删除


8

文件夹var / session经常保持大量数据波动,从而导致服务器上的节点大量使用,

每次我从会话文件夹中删除文件时,innode的使用率降到最低。

因此,我想问一下如何每隔24小时自动删除这些会话文件。

我刚刚开始与MAgento合作,所以到目前为止我还是新手,所以请您多多解释一下。

我知道我应该以某种方式通过cpanel或smt创建一份cron作业。

Answers:


2

如果您使用cron作业删除所有会话,则将删除所有客户购物车,并且人们会使您的网站生气。

建议您查看会话文件,看看它们是否可疑。

尝试从此处检查访问者IP地址在哪里:https//www.iplocation.net/

例如,如果您发现一堆中文IP,而您的网站不是中文,则可能是这些机器人在浪费您的带宽。您应该在Apache设置或中阻止其IP范围.htaccess

(我相信您甚至可以在Apache中进行基于国家/地区的过滤,但我认为这会减慢响应时间。我没有尝试过。)

Magento 1.x(不确定2.x)似乎也存在一个错误,即当客户端不接受cookie时,它会为每个请求创建一个新会话。因此,诸如Googlebot,Bingbot,SemrushBot等机器人均会生成大量会话文件。

对于我的服务器,我唯一需要做的就是摆脱那些机器人会话文件。在没有时间查找和修复Magento错误之前,我已经由cron运行了一个Shell脚本,以删除包含以下字符串的所有会话文件:

  • Googlebot
  • 宾博
  • 蜘蛛
  • 塞姆鲁什
  • AhrefsBot
  • 正常运行时间的机器人
  • 斯伯特

您是否找到解决错误的解决方案?我刚刚删除了1.2个Mio文件,这太荒谬了。
Marco Marco

我最初编写的用于清理文件的bash脚本起初效果很好,但是模式不断变化,因此需要进行大量维护工作。因此,我计划深入研究代码并找到真正的解决方案。该代码应检查客户端是否接受Cookie(因为漫游器不接受它们),并且不为这些客户端创建会话。
Buttle Butkus

完成后,您愿意共享代码吗?目前,我们仅与M2E Pro,Google和Bing有关。这三件事创建了会话文件堆。
Marco Marco

1

与其使用自定义脚本,不如通过在php.ini文件中指定正确的值来使PHP为您清除它们更有意义。如果您确保该session.gc_maxlifetime值具有相对较小的值(但> =您的会话cookie超时),例如1440并且session.gc_probability设置为1,则内置的PHP会话垃圾收集器应为您删除文件。


如果我在Magento ftp目录中找不到php.ini文件,该如何更改它们。我尝试创建文件test.php并使用ini_set设置这些值,但字符串不会更改其值。请帮助
Andrius

它不起作用,您还有其他解决方法吗?请帮忙
Jenith Samuel'May

只需在Magento ftp目录内创建一个名为phpinfo.php的文件,然后输入“ phpinfo();”即可。然后尝试将其加载到浏览器中,您将了解php.ini在服务器上的确切位置。然后,您可能可以轻松进行这些更改。
Asheem Patro

就我而言,漫游器每小时可以创建数千个新会话。但是我们希望真实的客户会议持续数周或更长时间。因此,PHP进行的会话清理不是解决之道。Magento需要在创建会话之前检查客户端是否接受cookie(和/或检查客户端是否为bot),而不是为每个未发送cookie的页面加载都创建一个新会话。
Buttle Butkus

1

Magento将客户的会话数据保存在 var / session文件夹中,如果删除该文件夹,它将删除所有客户的会话数据

假设您的来宾客户之一将3个产品添加到购物车,如果您删除会话数据,则会从购物车中删除所有3个产品,这对客户而言是不好的体验,而不是删除会话数据即可将会话保存到数据库中

要将数据库用于会话存储,只需在app / etc / local.xml中添加

<session_save><![CDATA[db]]></session_save>

或者您可以使用redis会话/ Memcached会话缓存将数据保存在redis缓存/ Memcached会话中

要在Magento中使用memcached会话存储,您需要在app / etc / local.xml中使用它

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

有关会话存储的更多信息,请访问此链接


0

一种解决方案是您可以创建每天运行一次的cron作业,以删除所需的文件。

在这里您可以看到如何设置Cron作业:https : //askubuntu.com/questions/2368/how-do-i-set-up-a-cron-job

cronjob的cpanel教程:http : //support.hostgator.com/articles/cpanel/how-do-i-create-and-delete-a-cron-job

您可以创建bash或php脚本来执行删除文件的操作。并将此脚本放在cron中,以便在服务器使用较少的情况下,在服务器时间凌晨3点或凌晨4点执行。要测试脚本是否正常运行,您可以手动运行它。


0

在文档根目录中创建一个sh文件。将下面的代码放入其中。

 #!/bin/bash
 # Shell script for cleaning session
 path=your document_root path goes here
 cd $path
 rm -rf var/session/*

用您的document_root路径更改路径,不带引号。当网站点击量较少时,运行此代码。

完成了!


这对我
有用

这也会杀死所有活动的会话
Kevin Krieger
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.