SO的形式如何记住以前的输入值?

时间:2010-05-01 12:32:42

标签: html forms webbrowser-control browser-cache

我注意到,如果我回到 提问 标题正文部分>按浏览器的 返回 按钮。

此功能在我测试的所有浏览器中都可用,但在我自己的项目中不存在。

我该如何处理这种影响?

更新

我还没有任何线索,但是猜猜是某种客户端缓存是由http标头还是javascript启用的?

4 个答案:

答案 0 :(得分:6)

它与页面的缓存属性有关。

1)如果允许浏览器缓存您的页面,它还会记住表单字段。

2)如果不允许缓存页面,它将忘记所有内容。

通常,动态生成的页面属于类别2,因此您看不到缓存。 这确实是由HTTP头(特别是Cache-Control和Last-Modified,或使用E-Tags)决定的 )。有关浏览器如何确定缓存(非平凡!)的说明,请参阅:

http://www.webscalingblog.com/performance/caching-http-headers-last-modified-and-etag.html

但最简单的方法是将表单放在静态HTML页面上,然后您的网络服务器将处理所有内容。

答案 1 :(得分:4)

您需要找到一种机制来在您所服务的网页上设置Cache-Control参数。

您没有说明您如何提供网页。但是,这是一个ASP页面的例子 使用后退按钮返回页面时,表单内容会消失(这是 您目前正在经历的行为):

<% Response.CacheControl = "no-cache" %>    
<% Response.AddHeader "Pragma", "no-cache" %>    
<% Response.Expires = -1 %>    
<HTML>    
<HEAD>    
<TITLE>Test page</TITLE>    
</HEAD>      
<BODY>    
Type some text into this box, click SO followed by the BACK button:   
<input type="text" name="title" value="" />   
<a href="http://www.stackoverflow.com">SO</a>    
<p>    
When you get back the text you typed will be gone.   
</BODY>    
</HTML>    

注意前三行,做一些小修改......

<% Response.CacheControl = "private" %>    
<HTML>    
<HEAD>    
<TITLE>Test page</TITLE>    
</HEAD>      
<BODY>    
Type some text into this box, click SO followed by the BACK button:   
<input type="text" name="title" value="" />   
<a href="http://www.stackoverflow.com">SO</a>    
<p>    
When you get back the text you typed will still be there   
</BODY>    
</HTML>    

现在保留输入字段内容。 这是您尝试实现的行为。那里 可能是您需要设置的其他参数,具体取决于您的具体情况 需求和服务器应用的默认值。

有关Cache-Control的更多详细信息,请访问:

Cache Control in ASP。与大多数微软一样,它只是 讨论IE。

Caching教程为几个不同的Web服务器(包括PHP)提供了一个很好的介绍。

w3.org是您的参考 真的需要研究,特别是关于Cache-Control的第14.9节。

获得的关键 您正在寻找的行为是在使用正确的缓存控制参数化的服务页面中。

答案 2 :(得分:1)

虽然我不能给予太多关注,但“提问”页面的http标题如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Set-Cookie: [EDITED AWAY}
Date: Mon, 03 May 2010 16:04:44 GMT
Content-Length: 4800

我将它与您自己的页面/表单进行比较,尤其是任何处理缓存和过期的标题。

答案 3 :(得分:0)

没有魔力。只需尝试以下HTML:

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Test</title>
</head>
<body>
    <input type="text" name="title" value="" />
    <a href="http://www.google.com">Google</a>
</body>
</html>

在浏览器中打开它,键入一些文本,单击链接,然后单击“后退”按钮,它将记住该值。测试并使用IE8,FireFox 3.6,Chrome 4。