Question

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

<?php

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

if(isset(

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

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

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

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

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

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

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

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

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

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

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

<*>REQUEST['description'],

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

<*>REQUEST['qty'],

J'ai une application PHP dans laquelle j'aimerais que certains objets persistent de la manière suivante:

  1. L'objet ne doit pas exister dans la $ _SESSION. Des fenêtres de navigateur Web distinctes doivent contrôler des instances distinctes de l'objet.
  2. L'utilisateur final ne doit pas pouvoir modifier l'objet en modifiant manuellement le contenu de la variable $ _REQUEST (si cela se produit, la demande doit être traitée comme corrompue).

Existe-t-il une meilleure pratique / une bonne manière de procéder? Alors que PHP devient de plus en plus orienté objet, je crains de réinventer une roue.

Le but principal de ce code est de permettre la création et la manipulation d'objets complexes sans utiliser de base de données jusqu'à ce qu'ils soient validés. J'utiliserai alors une transaction appropriée pour les valider intégralement dans la base de données. Je veux faire en sorte que ma base de données ne contienne que la facture complète ou aucune facture.

Ma méthode actuelle est la suivante:

<*>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>
Était-ce utile?

La solution

Vous pouvez également enregistrer l'état sur le client, sans cookies, en utilisant une simple entrée de formulaire masquée. Tant que les données (probablement un blob sérialisé) sont chiffrées et signées, l'utilisateur ne peut pas les modifier sans interrompre leur session.

Steve Gibson utilise cette méthode pour son système de commerce électronique personnalisé. Bien que son code ne soit pas une source ouverte, il explique en détail les moyens de sauvegarder un état sans stocker de données sensibles sur le serveur ni requérir la gestion de cookies dans Épisode n ° 109 de la sécurité maintenant ," Système de commerce électronique de GRC "..

Autres conseils

Voici un truc: mettez-le dans un cookie!

Algorithme soigné:

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

L'avantage est que vous

a) peut expirer le cookie quand vous voulez parce que vous utilisez l'horodatage dans le cadre du hachage de signature.

b) peut vérifier que les données n'ont pas été modifiées côté client, car vous pouvez recréer le hachage à partir du segment de données dans le cookie.

De plus, vous ne devez pas stocker l'objet entier dans le cookie s'il est trop volumineux. Stockez simplement les données dont vous avez besoin sur le serveur et utilisez-les dans le cookie comme clé.

Je ne peux pas prendre crédit pour l'algorithme, je l'ai appris de Cal Henderson, de la renommée de Flickr.

Éditer: si vous trouvez que l’utilisation de cookies est trop compliquée, oubliez-les et stockez les données qui auraient été conservées dans le cookie dans un champ de formulaire masqué.

Ce que je voudrais faire est de stocker une clé cryptographique (et non la structure complète, comme dans l'exemple de votre exemple) dans une variable de formulaire masquée. Cette clé est un index d'une table uncreated_invoices où vous stockez des factures incomplètes.

Entre les pages, vous mettez à jour les données de la table uncreated_invoices, puis, une fois l'opération terminée, extrayez-la et validez-la. Si vous mettez le nom d'utilisateur dans la table uncreate_invoices, cela les laissera également reprendre là où ils se sont arrêtés (ne sachant pas si c'est un cas d'utilisation valide). Ce serait probablement une bonne idée d'y mettre de toute façon le nom d'utilisateur afin que les gens ne puissent pas essayer de détourner les factures d'autres personnes.

Si vous le souhaitez, vous pouvez probablement stocker des données sérialisées dans la table uncreated_invoices. Personnellement, je le normaliserais un peu (tout dépend de votre schéma) afin que vous puissiez facilement ajouter / supprimer des morceaux individuels.

Modifier: J'ai oublié de mentionner que vous devriez nettoyer la table uncreated_invoices afin qu'elle ne se remplisse pas de factures périmées.

Ne pourriez-vous pas stocker les données dans un tableau dans $ _SESSION, puis avoir un identifiant unique pour chaque fenêtre. Si chaque fenêtre a un identifiant unique, vous pouvez le passer dans vos formulaires. Stocker / récupérer les données de la session ou de la base de données en fonction de l’identifiant de la fenêtre.

Alors quelque chose comme ça? $ _SESSION ['data'] [$ windowid] - > $ objectname

Si vous ne pouvez pas utiliser SESSION, vous devez conserver les données vous-même. Vous devez placer les données à un endroit où elles persisteront, telles qu'une base de données ou un autre fichier. C’est le seul moyen, à part SESSION, de conserver des données.

Je reprends ça, vous pouvez envoyer les données de chaque page HTML et les utiliser localement. Chaque page qui accepte les données doit créer du code HTML / Javascript qui continue la séquence de données.

Si vous stockez des éléments côté client, ils peuvent être modifiés. Y a-t-il une raison spécifique pour laquelle vous ne souhaitez pas stocker les objets dans une session? Si un objet n'est pas viable, vous devrez le conserver ailleurs sur le serveur.

C'est bien, ils pourront ajouter tous les éléments qu'ils souhaitent. Le problème dans votre code est que vous prenez le descripteur d'élément, la quantité ET LE PRIX de la demande, le prix doit vraiment être recherché en arrière-plan, sinon un utilisateur pourrait créer son prix à la main. Heck, des articles de valeur négative, et vous obtenez des trucs gratuitement.

Vous voulez stocker quelque chose. Cela se fait généralement dans des bases de données. Comment connaissez-vous le prix de quelque chose sans chercher dans une base de données? Utilisez donc la même base de données pour stocker des informations sur l’utilisateur / la session en cours.

Vous pouvez utiliser les méthodes magiques __sleep () et __ wakeup ()

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top