Exclusão de arquivos de sessão Magento

8

A pasta var / session mantém constantemente uma quantidade muito grande de dados, causando um grande uso de nós no servidor,

toda vez que eu excluo arquivos da pasta da sessão, o uso do innode cai para o mínimo.

então, eu quero perguntar como posso excluir automaticamente esses arquivos de sessão a cada 24 horas, por exemplo.

Eu apenas comecei a trabalhar com o MAgento, então sou um pouco novato até agora.

Eu sei que eu deveria criar um trabalho cron de alguma forma através de cpanel ou smt assim.

Andrius
fonte

Respostas:

2

Se você usar um trabalho cron para excluir todas as sessões, todos os carrinhos de compras dos clientes serão excluídos e as pessoas deixarão seu site irritado.

Sugiro que você analise seus arquivos de sessão e veja se eles parecem suspeitos.

Tente verificar de onde são os endereços IP dos visitantes aqui: https://www.iplocation.net/

Se, por exemplo, você encontrar vários IPs chineses e seu site não for chinês, provavelmente serão robôs que estão desperdiçando sua largura de banda. Você deve bloquear os intervalos de IP nas configurações do Apache ou em .htaccess.

(Acredito que você pode até fazer filtragem baseada no país no Apache, mas acho que isso diminui o tempo de resposta. Não tentei isso.)

O Magento 1.x (não tenho certeza sobre o 2.x) também parece ter um bug, ao criar uma nova sessão para cada solicitação quando o cliente não aceita cookies. Assim, robôs como Googlebot, Bingbot, SemrushBot e outros geram um grande número de arquivos de sessão.

Para o meu servidor, a única coisa que eu precisava fazer era me livrar desses arquivos de sessão de bot. Até que eu tenha tempo para encontrar e corrigir o bug do Magento, tenho um script de shell em execução pelo cron para remover todos os arquivos de sessão que contêm essas strings:

  • Googlebot
  • bingbot
  • aranha
  • semrush
  • AhrefsBot
  • UptimeRobot
  • spbot
Buttle Butkus
fonte
Você encontrou uma solução para corrigir o erro? Acabei de excluir mais de 1,2 milhão de arquivos, o que é simplesmente ridículo.
Marco Marco
O script bash que escrevi para limpar os arquivos funcionou muito bem no começo, mas os padrões continuam mudando, por isso é muito trabalho de manutenção. Então, eu estou planejando cavar o código e encontrar a solução real. O código deve verificar se o cliente aceita cookies (porque os bots não os aceitam) e NÃO criar uma sessão para esses clientes.
Buttle Butkus
Você gostaria de compartilhar o código, se tiver terminado? No momento, temos apenas um problema com o M2E Pro, Google e Bing. Essas três coisas criando montes de arquivos de sessão.
Marco Marco
1

Em vez de usar scripts personalizados, faria mais sentido simplesmente fazer com que o PHP os esclarecesse, especificando os valores corretos em seu php.iniarquivo. Se você garantir que session.gc_maxlifetimepossui um valor relativamente pequeno (mas> = o tempo limite do cookie da sessão), por exemplo, 1440 e session.gc_probabilityestá definido como 1, o coletor de lixo embutido na sessão do PHP deve remover os arquivos para você.

Peter O'Callaghan
fonte
como alterá-los se não consigo encontrar o arquivo php.ini no diretório ftp do Magento. Eu tentei criar o arquivo test.php e defini-los com ini_set, mas as strings alteram seus valores. por favor ajude
Andrius
Não o seu trabalho, se você tiver quaisquer outras soluções Por favor, ajuda?
Jenith Samuel
Apenas crie um arquivo nomeando phpinfo.php dentro do diretório ftp do Magento e coloque "phpinfo ();". Em seguida, tente carregar esse no navegador e você saberá exatamente onde está o php.ini no seu servidor. Então provavelmente você pode fazer essas alterações facilmente.
Asheem Patro
No meu caso, os bots podem criar milhares de novas sessões por hora. Mas queremos que as sessões reais dos clientes durem semanas ou mais. Portanto, a limpeza da sessão pelo PHP não é a resposta. O Magento precisa verificar se o cliente aceita cookies (e / ou se o cliente é um bot) antes de criar uma sessão, em vez de criar uma nova sessão para cada carregamento de página que não enviou um cookie.
Buttle Butkus
1

Magento salva os dados da sessão do cliente na pasta var / session. Se você excluir esta pasta, todos os dados da sessão do cliente serão excluídos.

Vamos supor que um de seus clientes convidados adicione 3 produtos ao carrinho, se você excluir os dados da sessão, ele removerá todos os 3 produtos do carrinho e será uma experiência ruim para o cliente, em vez de excluir os dados da sessão, você poderá salvar a sessão no banco de dados

Para usar o banco de dados para armazenamento de sessão, basta ter isso no seu aplicativo / etc / local.xml :

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

ou você pode usar o cache de sessão redis / Sessão Memcached para salvar dados no cache redis / Sessão Memcached

Para usar um repositório de sessões memcached no Magento, você precisará disso no seu aplicativo / 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>

Para obter mais informações sobre armazenamento de sessão, visite este link

Vaibhav Ahalpara
fonte
0

Uma solução é criar um trabalho cron que esteja sendo executado uma vez por dia para excluir os arquivos que você deseja.

Aqui você pode ver como configurar o cron job: /ubuntu/2368/how-do-i-set-up-a-cron-job

um tutorial cpanel para cronjob: http://support.hostgator.com/articles/cpanel/how-do-i-create-and-delete-a-cron-job

Você pode criar um script bash ou php que fará a operação de exclusão de arquivos. E coloque esse script no cron, para ser executado às 3 ou 4 da manhã, quando o servidor for menos usado. Para testar o script está funcionando, você pode executá-lo manualmente.

Nikola
fonte
0

Crie um arquivo sh na raiz do documento. Coloque o código abaixo dentro dele.

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

altere o caminho com o caminho document_root sem aspas. Execute esse código quando houver menos ocorrências no site.

FEITO!!

Shyam Krishna Sreekumar
fonte
isso funciona para mim rm -rf var / session / *
Alam Zaib
Isso também mata todas as sessões ativas
Kevin Krieger