El carrito deja caer todos los artículos / se borra la sesión del carrito

27

Un sitio que administro repentinamente (posiblemente hace 2 semanas, según las estadísticas de GA, y que solo informaba ahora) comenzó a soltar los artículos del carrito cuando lo ve o sale de la caja.

El 'mini-carrito' superior muestra los artículos en el menú desplegable, hasta que navegue hasta el carrito / finalice la compra, y luego termine en el carrito, con el mensaje 'No hay artículos en su carrito'.

Parece un problema de sesión. No sucede cuando inicia sesión.

Se eliminaron todas las opciones de validación de sesión en 'sistema-> web-> configuración de validación de sesión' y se habilitó la que dice 'Usar SID en Frontend'. Esto resolvió el problema, pero como esta configuración no cambió en los últimos 3 meses, sé que hay un problema subyacente.

¿Entonces esto apunta al problema con el problema de identificación de dolor? De alguna manera, el sitio está perdiendo en qué ID de tienda se encuentra y eliminando los datos de sesión / carrito. Tal vez algún observador / evento / reescritura por algún módulo.

No puedo replicar el problema en el desarrollador local o en el servidor UAT. DB en UAT tiene 2 semanas de antigüedad, por lo que esto podría apuntar a un problema / configuración de db.

Cosas que estoy intentando: estoy ocupado sacando db actual en vivo a UAT para actualizarlo, para ver si puedo replicar el problema allí. se actualizará cuando eso esté hecho.

Una vez que pueda replicar el problema en un área no activa, sistemáticamente deshabilitaré los módulos, veré si hay algún problema con los ID de la tienda (comenzando con MageMonkey y sweettooth, ya que se actualizaron hace 2 semanas)

La pregunta es: ¿qué más puedo probar? ¿Algún indicador de dónde puedo golpear algunos puntos de interrupción y pasar el código para ver si puedo rastrear este problema?

no hay sistemas de caché adicionales como barniz o memcache instalados. El servidor es una instalación estándar de cpanel. probando en uat deshabilité todo el caché.

actualización adicional: parecería que cuando uso el tema predeterminado no puedo reproducirlo. Estoy moviendo sistemáticamente las carpetas de anulación de temas.

También usé git para retroceder el código y el problema persiste con cada hash.

Actualización: ha pasado un tiempo desde que tuve tiempo para gastar en esto. Alta carga de trabajo.

Moví las sesiones a archivos y el problema desapareció. Dado que el cliente no tiene la intención de usar varios servidores en el futuro cercano, y debido a mi carga de trabajo, esto se dejó así. Lo más probable es que vuelva a morderme más tarde.

El soporte de magento sugirió que el problema está relacionado con el módulo goloso que extiende las clases de sesión, pero he desactivado ese módulo y el problema persiste.

se actualizará cuando obtenga más resultados.

ProxiBlue
fuente
El 'Usar SID en Frontend' no solucionó el problema. Parece que el problema es aleatorio. Funciona bien para algunas sesiones, gotas para otras.
ProxiBlue
Ahora puedo replicar esto de manera confiable en UAT. Parece que 8/10 intentos de agregar al carrito tienen este problema. Luego, la sesión se 'pega' y todo funciona como de costumbre. Se eliminaron SweetTooth y MageMonkey como razones (después de que se actualizaron). Se confirmó que es un problema de sesión. Cuando agrego al carrito, tengo una sesión con una ID, cuando voy a ver el carrito, obtengo una nueva identificación de sesión.
ProxiBlue
Algunos colegas encontraron un problema casi idéntico. No sé exactamente qué causó el problema (sé que estaba relacionado con memcache y / o barniz), pero la solución fue configurar un equilibrador de carga para los servidores. Por lo tanto, debe hablar con el administrador del servidor sobre esto.
Vlad Preda
1
¿Cuál es la versión de magento? ¿Qué estás usando también como almacenamiento de sesión? ¿Cambiar a archivos o base de datos, respectivamente, hace la diferencia?
Kristof en Fooman
@Fooman Hola, EE 1.11.2.0, usando la sesión de DB, no he intentado cambiar a archivos, informará de qué resultado se trata.
ProxiBlue 01 de

Respuestas:

8

En nuestros cuadros de cPanel, los activos faltantes servían a toda la página de Magento.

El valor predeterminado de cPanel es, ErrorDocument 404 /404.shtmlpero /404.shtmlno existe, en la raíz del documento de Magento, por lo que .htaccess se ejecuta nuevamente y se redirige /404.shtmla index.php(usando mod_rewrite).

El .htaccess predeterminado de Magento debe especificar 404, 500 y otros controladores de errores explícitamente.

Para solucionar este problema, agregamos lo siguiente a nuestro .htaccess:

ErrorDocument 404 /errors/404.php

Probablemente también deberíamos agregar 500s también:

ErrorDocument 500 /errors/500.php

jmlnik
fuente
@ProxiBlue ¿resolvió esto su problema ya que es la respuesta aceptada? Tengo un problema casi idéntico. Todavía no estoy seguro de qué lo está causando.
dchayka
9

¿Estás usando Varnish en el servidor?

Hemos visto varias implementaciones en las que las personas eliminan la cookie ANTES de buscar contenido estático (images / css / js), por lo que si la imagen / js / css no existe; carga el bootstrap de Magento y los 404, lo que elimina por completo la cookie y la sesión del sitio.

Ben Lessani - Sonassi
fuente
Sin barniz, desearía que fuera así de simple: '(
ProxiBlue
Hola, tengo el mismo problema, ¿puedo saber cuál es la solución?
Kandarp B Patel
@Ben Por favor, ¿puedes explicar esto?
burntblark
6

Un problema podría ser que Magento no está guardando los datos de la sesión al cambiar de HTTP a HTTPS . Asegúrese de que la configuración necesaria para SSL, etc. esté configurada correctamente.

Otro problema podría ser que el ISP del cliente está cambiando su dirección IP, como se documenta aquí .

Para solucionar este problema:

Cambie la configuración de Validación de sesión en el Administrador de Magento, que se encuentra en Sistema> Configuraciones> Web , a 'no' en todo excepto " Validar HTTP_USER_AGENT ". Después de hacer esto, vaya a Sistema> Administración de caché y actualice la caché de configuración para aplicar los cambios.

pzirkind
fuente
El carrito todavía está en http, por lo tanto, no es un problema http-> https.
ProxiBlue
1
Nos está sucediendo a nosotros, también en nuestro entorno UAT, y tenemos una ip fija. Agradezco las sugerencias.
ProxiBlue
5

Hemos observado este problema cuando falta una imagen en una página, especialmente si la imagen falta en todas las páginas, por ejemplo, en un encabezado o pie de página. Parece que la página 404 que devuelve Magento o el servidor web rompe la cookie de sesión de la interfaz, lo que lleva a la pérdida de sesión. Está en nuestra lista de cosas para arreglar, pero la solución es garantizar que no falten imágenes ...

Jonathan Day
fuente
Me alegra que eso no esté sucediendo para algunos de nuestros clientes. Más 404 de los que me gustaría admitir.
philwinkle
2
@jonathanday Magento no hará esto, pero Varnish mal configurado sí.
Ben Lessani - Sonassi
@sonassi, ¿puedes ampliar los pls de Varnish mal configurados? Hemos tenido el mismo problema. ¡Arreglar la página 404 ha solucionado el problema, pero me encantaría saber si podemos configurar Varnish mejor!
jmlnik
De hecho, esto era lo que estaba sucediendo. ¡De alguna manera me perdí esta respuesta! El hecho es que magento no debería estar empujando la versión del controlador de la página 404, sino una página 404 estática.
ProxiBlue
1
Publiqué una respuesta que lo explica.
Ben Lessani - Sonassi
1

Esto podría ser un problema de cookies / fecha del servidor. Lo primero que debe verificar son los encabezados de cookies. Inspecciona los encabezados (usando algo como Firebug, Charles o Fiddler).

Deberías ver algo como lo siguiente:

Set-Cookie  frontend=9dhtlgf1qmo6loqksvvmqjd625; expires=Thu, 31-Jan-2013 05:01:13 GMT; path=/; domain=.foo.com; HttpOnly

Si el valor del campo caduca está en el pasado, es probable que el tiempo en su servidor sea incorrecto. Esto puede suceder cuando los servicios como ntpd no se inician. Si ese es el caso, verifique la hora en el servidor. Si el tiempo está apagado, verifique el estado de ntpd (o el servicio de demonio para mantener actualizada la hora del servidor).

beeplogic
fuente
Marcado, fecha / hora del servidor si está bien, la fecha / hora de la cookie está bien :(
ProxiBlue
1

La recolección de basura PHP está limpiando las sesiones prematuramente. Lo he visto yo mismo en sitios de alto tráfico .

Algunos consejos para solucionar problemas:

  • ¿Cuántos años tiene tu sesión más antigua? Para averiguarlo: ls -laht [mageroot]/var/session/ | tailsi no tiene sesiones de más de un par de semanas, es probable que la recolección de basura sea la culpable
  • Mueva sesiones a otro almacén de datos temporalmente, por ejemplo, MySQL o Memcached. ¿Se resolvió el problema?
  • ¿Está sucediendo esto en un servidor de desarrollo? Si no, y todas las cosas son iguales, podría ser que los niveles de tráfico estén provocando el vencimiento prematuro de la sesión o la recolección de basura

He solucionado esto de una de dos maneras:

  1. En su .htaccess, agregue php_value session.gc_maxlifetime 2592000
  2. En su php.ini, configure session.gc_maxlifetime

Más lectura: http://www.php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

philwinkle
fuente
1
Buenas sugerencias Lo intentaré en unos días
ProxiBlue,
1

Tuvimos un problema similar. En nuestro caso, fue la configuración de barniz (como Ben Lessani, sugirió). Hemos configurado nuestro Barniz para almacenar en caché los 404 para 120 para que nuestros servidores no se vean mal cuando hay un error 404 en una página.

Entonces, el problema es para 404s Magento respondía con un Set-Cookie en el encabezado de las cookies frontend y frontend_cid, que restablece la sesión del cliente.

Nuestra solución para esto es eliminar cualquier conjunto de cookies para respuestas 404,

unset beresp.http.set-cookie;
Gracias
fuente
0

Cosas tontas que me han roto las sesiones de PHP en el pasado y que vale la pena revisar:

  • un disco lleno
  • hora del servidor inexacta
xifoides
fuente
:) comprobado disco primero, todo bien.
ProxiBlue
fecha bien :( no es tan simple, ugh [~ / public_html / var / log] # fecha jue 31 de enero 11:55:49 WST 2013
ProxiBlue