2017-09-29 5 views
0

Scénario - L'utilisateur poste un formulaire de formSubmit.cfm à formAction.cfm qui crée des données html qui ne doivent pas être stockées dans le cache du navigateur. Il a également des balises d'ancrage à linkTarget.cfm. Si l'utilisateur utilise son navigateur pour revenir à formAction.cfm, il devrait être invité par le navigateur à soumettre de nouveau le formulaire.Ne pas mettre en cache et conserver l'étendue du formulaire

Cela peut être accompli par les en-têtes http en général, qui sont simplifiés avec le tag <cfheader>.

Le problème est qu'avec Chrome, si je parviens à ne pas mettre en cache la page, je perds la portée du formulaire.

Exemple de code:

formSubmit.cfm 
<form action="formAction.cfm" method="post"> 
<input type="submit" name="submittedForm" value="submitMe" /> 
</form> 


formAction.cfm (minus headers) 
<cfif structKeyExists(form, 'submittedForm')> 
<p>Form Scope exists</p> 
<cfelse> 
<p>Form Scope Does Not Exist</p> 
</cfif> 
<p><a href="linkTarget.cfm">Link to next page.</a></p> 

La méthode d'essai était de vider le cache, puis regarder en naviguant au chrome: // cache /. Une fois là, je chercherais formAction.cfm. En outre, je devrais actualiser la page chaque fois que j'ai effacé le cache.

J'ai essayé différentes combinaisons d'en-têtes, mais voici les plus pertinentes. En outre, à l'aide des outils de développement de Chrome, la présence ou l'absence de données de formulaire correspondait au résultat de la fonction structKeyExists.

Comment puis-je faire en sorte que Chrome conserve les données de formulaire sans mettre en cache la page?

+0

Vous souhaitez que le navigateur cache le corps POST de la demande? Il n'y a pas une telle chose. Certains navigateurs ont leurs propres moyens de conserver les données de formulaire au cas où les utilisateurs doivent les soumettre à nouveau, mais cela n'a rien à voir avec HTTP et il n'existe aucun moyen général de contrôler cela. Vouloir mettre en cache une réponse POST semble faux pour commencer. Que diriez-vous de POST-Redirect-GET (303 Voir autre)? Si vous avez besoin de stocker le corps de la requête POST indépendamment, vous devez le stocker/restaurer vous-même, par ex. utiliser la session ou le stockage local (stockage Web du navigateur). – Alex

Répondre

2

Ran dans certains problèmes de mise en cache bizarre tout à l'heure. avez-vous essayé de donner un numéro de version avec la page?

<form action="formAction.cfm?V=#now()#" method="post">

+0

Je suis à la recherche d'une solution plus globale. Non mentionné dans la question est que les balises cfheader sont dans une balise personnalisée qui est utilisée dans plusieurs fichiers Application.cfm (.cfc). –