Подтвердить что ты не робот

Как SO формирует запоминание предыдущих входных значений?

Я заметил, что часть Заголовок или Тело запоминается, если я вернусь на страницу Спросить, нажав Назад в моем браузере.

Эта функция доступна во всех проверенных мной браузерах, но не существует для форм в моих собственных проектах.

Как я могу подойти к этому эффекту?

UPDATE

У меня пока еще нет подсказки, но угадайте, что какой-то кеш клиента включен http заголовками или javascript?

4b9b3361

Ответ 1

Он имеет отношение к свойствам кеширования вашей страницы.

1) Если браузеру разрешено кэшировать вашу страницу, он также будет помнить поля формы.

2) Если кэшировать страницу не разрешено, она забудет все.

Обычно динамически сгенерированные страницы попадают в категорию 2, поэтому вы не видите кеширование. Это действительно определяется заголовками HTTP (особенно Cache-Control и Last-Modified, или с использованием E-тегов ). Для объяснения того, как ваш браузер определяет кеширование (нетривиальный!), См., Например:

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

Но проще всего разместить форму на статической HTML-странице, тогда ваш веб-сервер будет обрабатывать все.

Ответ 2

Вам нужно найти механизм для установки параметров 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 доступны по адресу:

Управление кешем в ASP. Как и в большинстве случаев Microsoft, это только обсуждает IE.

Этот учебник по Кэширование обеспечивает хорошее введение с примером кода для нескольких разных веб-серверов, включая PHP.

w3.org - это ссылка, которую вы действительно необходимо изучить, в частности, раздел 14.9 "Кэш-контроль".

Ключ к получению поведение, которое вы ищете, - это обслуживание страниц с правильной параметризацией управления кэшем.

Ответ 3

В то время как я не могу дать много удовольствия, заголовки 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

Я бы сравнил это с вашими собственными страницами/формами, особенно с любыми заголовками, связанными с кешированием и истечением срока действия.

Ответ 4

Там нет волшебства. Просто попробуйте следующий 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="#" onclick="location.href='http://www.google.com'; return false;">Google</a>
</body>
</html>

Откройте его в своем браузере, введите текст, нажмите ссылку, а затем кнопку "Назад", и он запомнит значение. Протестировано и работает на IE8, FireFox 3.6, Chrome 4.