2010-05-01 26 views
13

我發現,如果我再回到提問我的瀏覽器的後退按鈕頁面標題身體部分被記住。SO的形式如何記住以前的輸入值?

此功能在我測試的所有瀏覽器中都可用,但在我自己的項目中不存在。

我該如何解決這個問題?

UPDATE

我仍然沒有任何線索還沒有,但你猜它是某種形式的客戶端緩存的通過HTTP頭或JavaScript?

+8

此功能通常由您的瀏覽器處理。 – 2010-05-01 12:58:13

+7

那爲什麼我的項目在同一瀏覽器中不存在這個功能?不同的目的必須發生不同的事情。 – user198729 2010-05-01 16:00:37

+0

人們可能會告訴你如何配置你的服務器來提供正確的緩存相關的http頭文件,如果你包含的信息與提供頁面的服務器軟件相關。每個服務器都有自己的配置,用於這些事情... – vkraemer 2010-05-10 05:53:30

回答

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頁面,那麼你的網絡服務器將處理一切。

+0

我不能把表單放在一個靜態的HTML頁面上, '不知道爲什麼'cache-control'自動設置爲'\t無存儲,no-cache,必須重新驗證,post-check = 0,pre-check = 0','Pragma'設置爲'no- cache'。 – user198729 2010-05-03 16:10:10

+0

緩存控制設置爲動態頁面的這些值,因爲(通常)您希望用戶每次都看到新生成的頁面,以確保他能看到最新的信息。否則,您可以從腳本中提供不同的Cache-Control標頭。更具體地說,我需要知道你用什麼語言來生成頁面。 – wump 2010-05-04 09:20:52

+0

@wump:Web瀏覽器應如何預先填充輸入值,是否有標準規範?還是瀏覽器實現這個「他們覺得」? – 2014-07-29 15:20:24

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.

+2

我沒有看到任何特別的東西,你能解釋它爲什麼有效嗎? – user198729 2010-05-03 15:18:48

+1

這可能適用,因爲它在本地文件系統上沒有Web服務器時被查看。 – 2011-08-08 15:24:20

+0

@ user198729:''它與你的頁面的緩存屬性有關。''看'wump'的答案(目前接受的答案) – 2014-07-29 15:15:28

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 

我比較,爲自己的頁面/形式,尤其是任何頭處理緩存和過期。

+0

我沒有設置任何標題信息,似乎我的Web服務器自動爲我添加緩存策略,這不是我所期望的。 – user198729 2010-05-03 16:16:04

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>  

注的前3名行,做一些小的修改......

<% 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 in ASP。與微軟的大多數事情一樣,它只討論IE瀏覽器,即 。

關於Caching的教程可以很好地介紹幾種不同的Web服務器(包括PHP)的示例代碼。

w3.org是您真正需要研究的參考,特別是關於Cache-Control的第14.9節。

獲取您正在查找的 行爲的關鍵在於使用正確的緩存控制參數化服務頁面。