2016-05-26 3 views
2

Ich glaube nicht, dass dies ein Framework-Problem ist. In meinen Recherchen scheint es ein Problem mit dem Browser-Cache zu sein, aber die Dinge, die ich versucht habe, haben nicht funktioniert.Browser-Cache-Problem bei übermittelten Formular

Leider möchte ich zwar nicht, dass der Benutzer auf die Zurück-Schaltfläche klickt, aber es gibt natürlich keine Möglichkeit (wirklich), den Benutzer daran zu hindern, auf die Zurück-Schaltfläche zu klicken.

Dies ist das Ergebnis des Formularuploads.

enter image description here

Dies funktioniert gut, ich bekomme das erwartete Ergebnis.

Wenn der Benutzer auf die Schaltfläche Zurück klickt, wird anstelle des gerade hochgeladenen Bildes das ursprüngliche Formular angezeigt.

enter image description here Nachdem der Benutzer auf Aktualisieren geklickt hat, nachdem er auf die Zurück-Schaltfläche des übermittelten Formulars geklickt hat, wird das hochgeladene Bild angezeigt.

enter image description here

ich zwei Vorlagen haben layout.php und layout_wide.php

ich dies in beiden Vorlagen versucht haben.

<meta http-equiv="cache-control" content="max-age=0" /> 
    <meta http-equiv="cache-control" content="no-cache" /> 
    <meta http-equiv="expires" content="0" /> 
    <meta http-equiv="pragma" content="no-cache" /> 

ich diesen Brauch Helfer versucht haben ...

<?php 
function include_stylesheets_versioned() 
{ 
    $response = sfContext::getInstance()->getResponse(); 
    sfConfig::set('symfony.asset.stylesheets_included', true); 
    $html = ''; 
    foreach ($response->getStylesheets() as $file => $options) { 
     if ((strpos($file, '?') === false) && (stripos($file, 'http') !== 0)) { 
      $file .= '?v='.sfConfig::get('app_resource_version'); 
     } 
    $html .= stylesheet_tag($file, $options); 
    } 
    echo $html; 
} 
function include_javascripts_versioned() 
{ 
    $response = sfContext::getInstance()->getResponse(); 
    sfConfig::set('symfony.asset.javascripts_included', true); 
    $html = ''; 
    foreach ($response->getJavascripts() as $file => $options) { 
     if ((strpos($file, '?') === false) && (stripos($file, 'http') !== 0)) { 
      $file .= '?v='.sfConfig::get('app_resource_version'); 
     } 

    $html .= javascript_include_tag($file, $options); 
    } 

    echo $html; 
} 

Ich bin zu versuchen, bereit, es in einem modalen setzen oder ein iframe die Zurück-Taste Problem, nehmen Sie für diese Form. Aber ich habe ein anderes Formular mit einem ähnlichen Problem, bei dem das Modaling keine Option ist.

Ich habe die Post Redirect Get Design Pattern gestern gesehen und denke, es könnte eine Lösung sein, aber ich frage mich, warum die Meta-Tags überhaupt nicht funktionieren.

Ich weiß, dass dies eine doppelte Frage sein kann, aber ich konnte keine Lösung finden, die funktioniert.

Hat jemand anderes dazu geraten und kann mir bitte jemand auf eine Lösung hinweisen.

Die App befindet sich auf einer AWS-Instanz und der Server ist NGINX, wenn das irgendwelche Auswirkungen darauf hat.

Vielen Dank im Voraus.

Antwort

0

Ich muss meine Layout-Vorlagen wiederholen, um den neuen Standards zu folgen. Sie wurden ursprünglich vor einiger Zeit erstellt.

Das funktioniert und gibt mir ein neues Zeit Ergebnis auf der Zurück-Taste.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<?php 
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    header("Cache-Control: no-store, no-cache, must-revalidate"); 
    header("Cache-Control: post-check=0, pre-check=0", false); 
    header("Pragma: no-cache"); 
?> 

<?php include_javascripts() ?> 
<?php include_stylesheets() ?> 
<?php include_http_metas() ?> 
<?php include_metas() ?> 
<?php include_title() ?> 
<link rel="shortcut icon" href="/favicon.ico" /> 
</head> 
<body> 
<?php echo $sf_content ?> 
</body> 
</html> 
<?php echo time(); ?> 

Ich denke, die große Veränderung in der DOCTYPE ist

OLD DOC TYPE

<!DOCTYPE html> 

HINWEIS **** !!!!

Keine der oben in symfony arbeitete 1.4.20

Für einige von Ihnen, die nach wie vor 1.4 verwenden ich folgendes in die Tat umzusetzen hatte, damit es funktioniert.

$this->getResponse()->setHttpHeader('Cache-Control', 'no-cache, no-store, must-revalidate, max-age=0, private'); 
    $this->getResponse()->setHttpHeader('Pragma', 'private'); 
    $this->getResponse()->setHttpHeader('Expires', 0); 
+0

arggh ... funktioniert in Firefox und IE, aber nicht Chrom oder Chrom – smugford

0

bitte überprüfen Sie, welche your browser cache is clean und folgen Sie dieser article.

müssen Sie CONTENT="-1" für HTTP-EQUIV="Expires" setzen und nicht auf 0

Sie auch <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate"/> verwenden müssen auf dieser Basis answer

<HTML> 
<HEAD> 
<TITLE>---</TITLE> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
</HEAD> 
<BODY> 

Text in the Browser Window 

</BODY> 
<HEAD> 
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate"> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
</HEAD> 
</HTML> 

ABER HTTP-EQUIVis highly unreliable so müssen Sie HTTP header from NGINX so erstellen Sie zuerst eine Konfiguration senden Datei und benennen Sie es expires.conf dann enthalten es in Ihrem Ursprung nginx confing:

server { 
    listen ...; 
    root ...; 
    index ...; 

    server_name ...; 

    charset ...; 
    include expires.conf; #here 

    ... 
} 

in Ihrem expires.conf sagen, dass Sie keine statische Dateien zwischenspeichern wollen (oder was auch immer Sie wollen nicht):

location ~* \.(?:manifest|appcache|html?|xml|json)$ { 
    expires -1; 
} 

Hinweise:

  • achten Sie auf Fälle von Wörtern. z.B. P
  • Verwendung von HEAD und META Tag im unteren Teil Ihrer HTML-Struktur ist eine Umgehung für IE-Cache-Richtlinie.
+0

Ich habe diesen Artikel gesehen, aber der erste Kommentar sagt: "Das muss der veraltetste Artikel sein, den ich je gesehen habe ...", also habe ich ihn abgewiesen. Ich habe die nie am Ende der Seite gesehen. Will versuchen -1 – smugford

Verwandte Themen