我不相信这是一个框架问题。在我的研究中,它似乎是一个浏览器缓存问题,但我尝试过的东西却没有用。
不幸的是,即使我不希望用户点击后退按钮,但显然没有办法(真的)阻止用户点击后退按钮。
这是表格上传的结果。
这很好我得到了预期的结果。
当用户点击后退按钮时,他们会获得原始形式,而不是他们刚刚上传的图片。
用户在单击提交表单中的后退按钮后单击刷新后,将获得应显示的上载图像。
我有两个模板layout.php和layout_wide.php
我在两个模板中都试过这个。
<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" />
我试过这个自定义助手......
<?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;
}
我准备尝试将其放在模式或iframe中,以便为此表单提取后退按钮问题。但是我有另一种类似问题的形式,即放入模态并不是一种选择。
昨天我确实看到了Post Redirect获取设计模式并认为它可能是一个解决方案,但我想知道为什么meta标签根本不起作用。
我意识到这可能是一个重复的问题,但我无法找到有效的解决方案。
是否还有其他人遇到此问题,有人请指点我解决。
该应用程序位于AWS实例上,如果与此有任何关联,则服务器为NGINX。
提前谢谢你。
答案 0 :(得分:0)
请仔细检查your browser cache is clean
,然后按article。
您需要为CONTENT="-1"
设置HTTP-EQUIV="Expires"
而不是0
您还需要根据此answer
使用<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, no-store, must-revalidate"/>
<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>
但是HTTP-EQUIV
is highly unreliable所以你需要发送HTTP header from NGINX
所以首先创建一个配置文件,并将其命名为expires.conf
,然后将其包含在你的原始nginx confing中:
server {
listen ...;
root ...;
index ...;
server_name ...;
charset ...;
include expires.conf; #here
...
}
你的expires.conf
中的表示你不想缓存静态文件(或者你不想要的任何东西):
location ~* \.(?:manifest|appcache|html?|xml|json)$ {
expires -1;
}
注意:
P
ragma HEAD
和META
标记是IE缓存策略的解决方法。答案 1 :(得分:0)
我需要重做我的布局模板以遵循新标准。它们是很久以前创作的。
这样可以在后退按钮上给我一个新的时间结果。
<!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(); ?>
我认为最大的变化是DOCTYPE
OLD DOC TYPE
<!DOCTYPE html>
请注意**** !!!!
以上都不适用于symfony 1.4.20
对于那些仍在使用1.4的人来说,我必须将以下内容放入操作中才能使其正常工作。
$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);