2011-12-07 11 views
5

Tengo una aplicación de carrito con elementos únicos con qty 1 - Necesito agotar la cantidad de stock cuando un usuario coloca uno en la cesta para evitar que alguien más lo compre. El problema es que si abandonan el carrito sin comprar, necesito volver a poner el artículo en inventario.PHP ejecutar un script cuando caduque una sesión

¿Hay alguna manera de reponer las existencias cuando caduque la sesión de compra? es decir, ejecute un script para reemplazar el stock.

+0

Parece un poco extraño hacerlo de esa manera. Podría, por ejemplo, agregar todos sus artículos a mi carrito. Si tu sesión normal es de 20 minutos, no tendrías stock por 20 min. ¿Por qué no simplemente eliminar el stock cuando alguien se retira? También podría tener un cheque cuando haga clic en verificar para asegurarse de que todavía esté en stock. –

+0

No los eliminaría de stock cuando los ponga en el carrito, pero solo cuando realmente los compre. – Gumbo

+0

Gracias, ¡estoy de acuerdo, pero no es mi decisión! –

Respuesta

4

Puede usar session_set_save_handler para crear una clase de manejo de sesión personalizada. Cuando hace esto, puede decidir otras acciones que deben ejecutarse cuando se convoca al recolector de elementos no utilizados o cuando se destruye la sesión. Si decide trabajar con el recolector de basura, asegúrese de conocer los valores de session.gc_divisor y session.gc_probability y también comprender qué hacen (esto establece la probabilidad de que se ejecute el recolector de basura).

+0

Esto es lo que buscamos gracias –

+0

@jimsmith Me alegro de que ayude – mishu

0

Cree una tabla de base de datos para seguir la actividad de la sesión, digamos sessions. En él, ponga al menos los campos session_id y un campo DATETIME o TIME llamado last_activity.

Si usted no tiene ya, también crear una tabla carts que mantiene el contenido de la cesta (como product_id y quantity) y tiene un enlace a la session_id. Entonces, hay 2 escenarios:

  1. el usuario termina la orden, simplemente "borrar" las filas de la tabla carts que pertenece a su sesión.
  2. El usuario abandona el carro, llama a un cronjob que comprueba si el valor last_activity es más de lo que desea (por ejemplo, hace más de una hora). Haga que el script vuelva a almacenar su suministro con la cantidad que estaba en el carrito.

Tenga en cuenta que tendrá que actualizar el campo last_activity en su rutina de carga/cargador (un mecanismo que se activa en cada página cargada).

1

Para evitar la necesidad de trabajos cron; que sea sencillo:

  1. Un usuario coge coloca un objeto en su/ella cesta
  2. Marca de tiempo para "colocar objetos en la cesta" se almacena en la base de datos, y una marca de tiempo de espera se almacena también. Por ejemplo (time() + (60*20))
  3. usuario cierra la página del
  4. En cada pageload haces un simple mysql-query para comprobar si las marcas de tiempo de tiempo de espera-son más pequeñas que la fecha y hora actual. Si la consulta arroja un resultado, elimínelo de la cesta y vuelva a colocarlo en la ranura.

(Esto requiere que actualice algún tipo de "última actividad" en la base de datos también)

En caso de ser bastante sencillo.

Cuestiones relacionadas