Pregunta

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<?php

include('encrypt.php');
include('invoice.class.php');

if(isset(

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['invoice'])) { $invoice = unserialize(decrypt(base64_decode(

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['invoice']))); if(!($invoice instanceOf invoice)) throw new exception('Something bad happened'); } else { // Some pages throw an exception if the

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST doesn't exist. $invoice = new invoice(); } if(isset(

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['action']) &&

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['action'] == 'addLine') { $invoice->addLine(new invoiceLine(

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['description'],

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['qty'],

Tengo una aplicación PHP donde me gustaría que ciertos objetos persistan de la siguiente manera:

  1. El objeto no debe existir en la $ _SESSION. Las ventanas separadas del navegador web deben controlar las instancias separadas del objeto.
  2. El usuario final no debe poder modificar el objeto cambiando el contenido de la variable $ _REQUEST a mano (si esto sucede, la solicitud debe tratarse como dañada).

¿Hay una forma adecuada / adecuada de hacer esto? Con PHP cada vez más orientado a objetos, me temo que estoy reinventando una rueda.

El gran propósito de este código es permitir la creación y manipulación de objetos complejos sin usar una base de datos hasta que se confirmen, luego usaré una transacción adecuada para enviarlos a la base de datos en su totalidad. Quiero hacer que mi base de datos contenga solo la factura completa, o ninguna factura en absoluto.

Mi método actual es el siguiente:

<*>REQUEST['unitprice']); } ?> <form action="index.php" method="post"> <input type="text" name="qty" /> ... <input type="hidden" name="invoice" value="<?php echo(base64_encode(encrypt(serialize($invoice)))); ?>" /> </form>
¿Fue útil?

Solución

También puede guardar el estado en el cliente, sin cookies, utilizando una simple entrada de formulario oculta. Mientras los datos (probablemente un blob serializado) estén cifrados y firmados, el usuario no podrá modificarlos sin interrumpir su sesión.

Steve Gibson utiliza este método para su sistema de comercio electrónico personalizado. Si bien su código no es de código abierto, explica detalladamente las formas de guardar el estado sin almacenar datos confidenciales en el servidor o requiriendo el soporte de cookies en Security Now Episode # 109 , " Sistema de comercio electrónico de GRC " ;.

Otros consejos

Aquí hay un truco: ¡póngalo en una cookie!

Algoritmo limpio:

$ data = serialize ($ object); $ tiempo = tiempo (); $ signature = sha1 ($ serverSideSecret. $ time. $ data); $ cookie = base64 (" $ signature- $ time- $ data ");

El beneficio es que tú

a) puede vencer la cookie cuando lo desee porque está usando la marca de tiempo como parte del hash de la firma.

b) puede verificar que los datos no se hayan modificado en el lado del cliente, porque puede recrear el hash del segmento de datos en la cookie.

Además, no tiene que almacenar todo el objeto en la cookie si es demasiado grande. Solo almacene los datos que necesita en el servidor y use los datos en la cookie como clave.

No puedo tomar crédito por el algoritmo, lo aprendí de Cal Henderson, de la fama de Flickr.

Editar: si el uso de las cookies es demasiado complicado, simplemente olvídate de ellas y almacena los datos que habrían ingresado en la cookie en un campo de formulario oculto.

Lo que haría sería almacenar una clave criptográfica (no toda la estructura, como se muestra en el ejemplo) en una variable de forma oculta. Esta clave es un índice de la tabla uncreated_invoices donde almacena las facturas incompletas.

Entre páginas, actualiza los datos en la tabla uncreated_invoices, y cuando terminan, los saca y los confirma. Si coloca el nombre de usuario en la tabla uncreate_invoices, esto también les permitirá continuar donde lo dejaron (no estoy seguro si ese es un caso de uso válido). Probablemente sería una buena idea poner el nombre de usuario de todos modos para que la gente no pueda intentar secuestrar las facturas de otras personas.

Es probable que pueda salirse con el almacenamiento de datos serializados en la tabla uncreated_invoices, si así lo desea. Personalmente, lo normalizaría un poco (cuánto depende de su esquema) para que pueda agregar / eliminar piezas individuales fácilmente.

Editar: Olvidé mencionar que debe limpiar la tabla uncreated_invoices periódicamente para que no se llene de facturas obsoletas.

No podría almacenar los datos en una matriz dentro de $ _SESSION, y luego tener una identificación única para cada ventana. Si cada ventana tiene una identificación única, puede pasarla como parte de sus formularios. Almacene / recupere los datos en la sesión o base de datos en función de la identificación de la ventana.

Entonces, ¿algo como esto? $ _SESSION ['data'] [$ windowid] - > $ objectname

Si no puede utilizar SESSION, debe conservar los datos usted mismo. Debe colocar los datos en algún lugar donde se mantendrán, como una base de datos o algún otro archivo. Es la única forma, además de la SESIÓN de proteger los datos.

Retiro eso, puedes enviar los datos en cada página HTML y usarlos localmente. Cada página que acepte los datos debe crear HTML / Javascript que continúe con la secuencia de datos.

Si almacena cosas en el lado del cliente, se pueden modificar. ¿Hay alguna razón específica por la que no quiera almacenar los objetos en una sesión? Si el almacenamiento del objeto no es viable, deberá conservarlo en otro lugar del servidor.

Está bien, podrán agregar todos los elementos que deseen. El problema en su código es que está tomando el descriptor del artículo, la cantidad Y EL PRECIO de la solicitud, el precio realmente debe consultarse en segundo plano, de lo contrario, un usuario podría realizar el envío de su precio. Heck, artículos de valor negativo, y obtienes cosas gratis.

Quieres guardar algo. Eso suele hacerse en bases de datos. ¿Cómo sabes el precio de algo sin buscarlo en una base de datos? Utilice la misma base de datos para almacenar información sobre el usuario / sesión actual.

Puedes usar los métodos mágicos __sleep () y __wakeup()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top