Domanda

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

<?php

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

if(isset(

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

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

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

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

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

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

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

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

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

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

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

<*>REQUEST['description'],

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

<*>REQUEST['qty'],

Ho un'applicazione PHP in cui vorrei che alcuni oggetti persistessero nel modo seguente:

  1. L'oggetto non deve esistere in $ _SESSION. Le finestre separate del browser Web devono controllare istanze separate dell'oggetto.
  2. L'utente finale non deve essere in grado di modificare l'oggetto modificando manualmente il contenuto della variabile $ _REQUEST (in tal caso la richiesta deve essere trattata come corrotta).

Esiste un modo migliore / corretto per farlo? Con PHP sempre più orientato agli oggetti, temo di reinventare una ruota.

Il grande scopo di questo codice è quello di consentire la creazione e la manipolazione di oggetti complessi senza usare un database fino a quando non saranno impegnati, quindi userò una transazione adeguata per impegnarli completamente nel database. Voglio farlo in modo che il mio database contenga solo la fattura completa o nessuna fattura.

Il mio metodo attuale è il seguente:

<*>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>
È stato utile?

Soluzione

È inoltre possibile salvare lo stato sul client, senza cookie, utilizzando un semplice input di modulo nascosto. Finché i dati (probabilmente un BLOB serializzato) sono crittografati e firmati, l'utente non può modificarli senza interrompere la sessione.

Steve Gibson utilizza questo metodo per il suo sistema di e-commerce personalizzato. Sebbene il suo codice non sia open source, spiega a fondo come salvare lo stato senza archiviare dati sensibili sul server o richiedere il supporto dei cookie in Security Now Episode # 109 , " Sistema di e-commerce GRC " ;.

Altri suggerimenti

Ecco un trucco: inseriscilo in un cookie!

Algoritmo pulito:

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

Il vantaggio è che tu

a) può scadere il cookie quando lo desideri perché stai utilizzando il timestamp come parte dell'hash della firma.

b) può verificare che i dati non siano stati modificati sul lato client, poiché è possibile ricreare l'hash dal segmento di dati nel cookie.

Inoltre, non è necessario memorizzare l'intero oggetto nel cookie se sarà troppo grande. Memorizza semplicemente i dati necessari sul server e utilizza i dati nel cookie come chiave.

Non posso prendermi il merito per l'algoritmo, l'ho imparato da Cal Henderson, della fama di Flickr.

Modifica: se ritieni che l'utilizzo dei cookie sia troppo complicato, dimenticali e memorizza i dati che sarebbero andati nel cookie in un campo di modulo nascosto.

Quello che vorrei fare è archiviare una chiave crittografica (non l'intera struttura, come nel tuo esempio) in una variabile di forma nascosta. Questa chiave è un indice di una tabella uncreated_invoices in cui vengono archiviate fatture incomplete.

Tra le pagine, aggiorni i dati nella tabella uncreated_invoices e, una volta terminati, li estrai e li esegui il commit. Se inserisci il nome utente nella tabella uncreate_invoices, ciò consentirà loro di riprendere da dove erano stati interrotti (non sono sicuro che si tratti di un caso d'uso valido). Probabilmente sarebbe una buona idea inserire il nome utente comunque in modo che le persone non possano provare a dirottare le fatture altrui.

Probabilmente puoi evitare di archiviare dati serializzati nella tabella uncreated_invoices, se lo desideri. Personalmente, lo normalizzerei un po '(quanto dipende dal tuo schema) in modo da poter aggiungere / rimuovere facilmente singoli pezzi.

Modifica: Ho dimenticato di dire che dovresti pulire periodicamente la tabella uncreated_invoices in modo che non si riempia di fatture non aggiornate.

Non è possibile archiviare i dati in un array all'interno di $ _SESSION e quindi disporre di un ID univoco per ciascuna finestra. Se ogni finestra ha un ID univoco, puoi passare l'id come parte dei tuoi moduli. Archivia / recupera i dati nella sessione o nel database in base all'ID della finestra.

Quindi qualcosa del genere? $ _SESSION [ 'dati'] [$ WindowID] - > $ nomeoggetto

Se non puoi usare SESSION, devi persistere tu stesso i dati. È necessario posizionare i dati in un punto in cui persisteranno, ad esempio un database o altri file. È l'unico modo, oltre a SESSIONE, di conservare i dati.

Lo riprendo, puoi inviare i dati in ogni pagina HTML e usarli localmente. Ogni pagina che accetta i dati deve creare HTML / Javascript che continua la sequenza di dati.

Se si memorizzano oggetti sul lato client, possono essere modificati. C'è un motivo specifico per cui non vuoi archiviare gli oggetti in una sessione? Se la memorizzazione di un oggetto in realtà non è praticabile, dovrai persistere in qualche altro posto sul server.

Va ??bene, saranno in grado di aggiungere tutti gli elementi che vogliono. Il problema nel tuo codice è che stai prendendo il descrittore dell'articolo, la quantità E IL PREZZO dalla richiesta, il prezzo dovrebbe davvero essere guardato in background, altrimenti un utente potrebbe creare a mano il loro prezzo. Diamine, oggetti di valore negativo e ottieni cose gratis.

Vuoi archiviare qualcosa. Di solito viene eseguito nei database. Come fai a sapere il prezzo di qualcosa senza cercarlo in un database? Quindi utilizzare lo stesso database per archiviare informazioni sull'utente / sessione corrente.

Puoi usare i metodi magici __sleep () e __wakeup()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top