Eliminación de archivos de sesión de Magento

8

La carpeta var / session mantiene constantemente una gran cantidad de datos que causa un gran uso inocente en el servidor,

Cada vez que elimino archivos de la carpeta de sesión, el uso de inode se reduce al mínimo.

así que quiero preguntar cómo puedo eliminar automáticamente esos archivos de sesión cada 24 horas, por ejemplo.

Acabo de comenzar a trabajar con MAgento, así que hasta ahora soy un poco novato, por lo que agradecería una gran explicación.

Sé que debería crear un trabajo cron de alguna manera a través de cpanel o smt así.

Andrius
fuente

Respuestas:

2

Si utiliza un trabajo cron para eliminar todas las sesiones, eliminará todos los carritos de compras de los clientes y la gente abandonará su sitio enojado.

Le sugiero que mire sus archivos de sesión y vea si parecen sospechosos.

Intente verificar dónde están las direcciones IP de sus visitantes desde aquí: https://www.iplocation.net/

Si, por ejemplo, encuentra un montón de direcciones IP chinas y su sitio web no es chino, estos probablemente sean bots que están desperdiciando su ancho de banda. Debe bloquear sus rangos de IP en su configuración de Apache o en .htaccess.

(Creo que incluso puedes hacer filtros basados ​​en países en Apache, pero creo que ralentiza los tiempos de respuesta. No lo he intentado).

Magento 1.x (no estoy seguro acerca de 2.x) también parece tener un error en el que crea una nueva sesión para cada solicitud cuando el cliente no acepta cookies. Entonces, bots como Googlebot, Bingbot, SemrushBot y otros, generan una gran cantidad de archivos de sesión.

Para mi servidor, lo único que tenía que hacer era deshacerme de esos archivos de sesión de bot. Hasta que tenga tiempo de encontrar y corregir el error de Magento, tengo un script de shell que ejecuta cron para eliminar todos los archivos de sesión que contienen estas cadenas:

  • Googlebot
  • bingbot
  • araña
  • semrush
  • AhrefsBot
  • UptimeRobot
  • spbot
Buttle Butkus
fuente
¿Encontró una solución para corregir el error? Acabo de eliminar más de 1.2 archivos Mio, lo cual es simplemente ridículo.
Marco
La secuencia de comandos bash que escribí para limpiar los archivos funcionó muy bien al principio, pero los patrones siguen cambiando, por lo que es mucho trabajo de mantenimiento. Así que planeo profundizar en el código y encontrar la solución real. El código debe verificar si el cliente acepta cookies (porque los bots no las aceptan) y NO crear una sesión para esos clientes.
Buttle Butkus
¿Te importaría compartir el código, si has terminado? Por el momento solo tenemos un problema con M2E Pro, Google y Bing. Esas 3 cosas crean montones de archivos de sesión.
Marco
1

En lugar de usar secuencias de comandos personalizadas, tendría más sentido simplemente hacer que PHP las elimine especificando los valores correctos en su php.iniarchivo. Si se asegura de que session.gc_maxlifetimetiene un valor relativamente pequeño (pero> = el tiempo de espera de la cookie de su sesión), por ejemplo, 1440 y session.gc_probabilityestá configurado en 1, entonces el recolector de basura de sesión PHP incorporado debería eliminar los archivos por usted.

Peter O'Callaghan
fuente
¿Cómo los cambio si no puedo encontrar el archivo php.ini en el directorio ftp de Magento? Traté de crear el archivo test.php y establecí esos valores con ini_set, pero las cadenas no cambian sus valores. por favor ayuda
Andrius
No funciona, ¿tenía alguna otra solución? Por favor ayuda
Jenith Samuel
Simplemente cree un archivo con el nombre phpinfo.php dentro del directorio ftp de Magento y coloque "phpinfo ();". Luego, intente cargarlo en el navegador para saber dónde se encuentra exactamente el php.ini en su servidor. Entonces, probablemente pueda hacer estos cambios fácilmente.
Asheem Patro
En mi caso, los bots pueden crear miles de nuevas sesiones por hora. Pero queremos que las sesiones de clientes reales duren semanas o más. Entonces, la limpieza de sesión por PHP no es la respuesta. Magento necesita verificar que el cliente acepte cookies (y / o verificar si el cliente es un bot) antes de crear una sesión, en lugar de crear una nueva sesión para cada carga de página que no envió una cookie.
Buttle Butkus
1

Magento guarda los datos de sesión del cliente en la carpeta var / session si elimina esta carpeta, eliminará todos los datos de sesión del cliente

Supongamos que uno de sus clientes invitados agrega 3 productos al carrito si elimina los datos de la sesión, eliminará los 3 productos del carrito y es una mala experiencia para el cliente, en lugar de eliminar los datos de la sesión, puede guardar la sesión en la base de datos

Para usar la base de datos para el almacenamiento de la sesión, simplemente tenga esto en su aplicación / etc / local.xml :

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

o puede usar la sesión de redis / caché de sesión de Memcached para guardar datos en la caché de redis / sesión de Memcached

Para usar una tienda de sesión memcached en Magento, necesitará tener esto en su aplicación / 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 obtener más información sobre el almacenamiento de sesiones, visite este enlace.

Vaibhav Ahalpara
fuente
0

Una solución es crear un trabajo cron que se ejecute una vez al día para eliminar los archivos que desee.

Aquí puede ver cómo configurar el trabajo cron: /ubuntu/2368/how-do-i-set-up-a-cron-job

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

Puede crear un script bash o php que hará la operación de eliminar archivos. Y coloque este script en el cron, para que se ejecute a las 3 o 4 a.m. hora del servidor, cuando el servidor se usa menos. Para probar si el script funciona, puede ejecutarlo manualmente.

Nikola
fuente
0

Cree un archivo sh en la raíz del documento. Poner el siguiente código dentro de él.

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

cambie la ruta con su ruta document_root sin comillas. Ejecute este código cuando haya menos visitas al sitio.

¡¡HECHO!!

Shyam Krishna Sreekumar
fuente
esto funciona para mí rm -rf var / session / *
Alam Zaib
Esto también mata todas las sesiones activas
Kevin Krieger