Как определить reload страницы на стороне сервера?

Bermuda

Новичок
Как определить reload страницы на стороне сервера?

Необходимо определить на стророне сервера как была загружена страница. Точнее,я хотел бы знать, как определить то, что пользователь нажал F5 (обновить, reload) в браузере. По каким признакам можно это определить? Необходимо знать это для того, чтобы решать отдавать ли пользователю страницу из кэша или генерировать заново.
 

KR

alive in new life
может быть у него реферер будет этой же страницы?
 

RomikChef

Guest
реферер будет тот же.

Bermuda, на сервере узнать, что нажал человек в браузере - нельзя. не передает браузер такой информации.
Браузер просто запрашивает страницу, и неважно, каким образом человек ее указао - на ссылку нажал, или адрес руками набрал, или ф5 нажал.

У тебя именно такой критерия отдачи из кэша?
Ты отдаешь из него ТОЛЬКО по ф5?
 

Bermuda

Новичок
Автор оригинала: RomikChef
У тебя именно такой критерия отдачи из кэша?
а) Страница генерируется заново и кладется в кэш если:
- страницы нет в кэше
- истекло время жизни страницы в кэше
- размер закэшированной страницы меньше минимально допустимого (кривое кэширование при одновременном доступе нескольких пользователей или при отмене загрукзки страницы по Esc)
- юзер залогинен (принципиально нельзя кэшировать)
- в конфиге выставлен флаг "не кэшировать"
- получена GET переменная "не кэшировать"

б) Иначе страница отдается из кэша

Хэш страницы вычисляется

$hashe = md5(implode(" ", array_merge($_GET, $_POST)).$_SESSION["language"]);

Хотелось бы добавить еще одно условие регенерирования страницы - "пользовательский reload страницы"
 

RomikChef

Guest
- истекло время жизни страницы в кэше
ЭТО у тебя работает и на релоад.
 

Bermuda

Новичок
Автор оригинала: RomikChef
- истекло время жизни страницы в кэше
ЭТО у тебя работает и на релоад.
Имелось в виду время жизни страницы в кэше на стороне сервера.

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

RomikChef

Guest
а мне это тоже кажется очевидным.
И не вижу, что это меняет.

вроде бы, логика тут простая, как 2х2=4
и чего тебе тут не ясно до сих пор - сие недоступно уму моему.

узнать, КАК ИМЕННО юзер запросил страницу - не предсталвяется возможным.

Значит, у нас остается один способ - таймаут.
А этот способ у тебя и так уже реализован.

компрене ву?
 

RomikChef

Guest
учите протокол НТТР.
там есть все ответы.

кстати. Сейчас посмотрел на то, как вычисляется хэш.
массив пост там лишний.
 

Bermuda

Новичок
Автор оригинала: RomikChef
Сейчас посмотрел на то, как вычисляется хэш.
массив пост там лишний.
Не лишний.
От этих данных база на сайте не меняется.
Таким образом при следующем аналогичном POST-е будет сгенерирована такая же страница. Если она такая же, то почему бы нам ее не закэшировать?
 

RomikChef

Guest
если данные не сервере не меняются, то и метод пост использовать не следует.
поскольку у юзера при обновлении будет выскакивать неприятная табличка, а при нажатии "назад" непонятный текст.
 

Bermuda

Новичок
Автор оригинала: RomikChef
если данные не сервере не меняются, то и метод пост использовать не следует.
Ну, типа более секьюрно и т. д.


Автор оригинала: RomikChef
поскольку у юзера при обновлении будет выскакивать неприятная табличка, а при нажатии "назад" непонятный текст.
Здравая мысль здесь есть. Это идея. Надо подумать...

Действительно выгодно когда нужно сослаться на результаты поиска или результаты обработки другой формы, а в адресной строке ничего нет. Может вообще все GET-том пихать?
 

Bermuda

Новичок
Автор оригинала: RomikChef
учите протокол НТТР.
там есть все ответы.
Учил. Много читал. Ответа на мой вопрос не нашел, так как он там даже не обсуждается. Но вопрос от этого не решился, потому и спросил. Вот если бы там было прямо написано, что "никаким образом нельзя узнать нажал ли юзер F5 или нет", то тогда бы Ваш совет был бы к месту. А еще кроме протокола есть браузер с разными языками на стороне клиента и с той стороны это можно решить, но это, на мой взгляд, изврат.
 

RomikChef

Guest
Ну, типа более секьюрно и т. д.
Ну, это секьюрность страуса, который прячет голову в песок.
Может вообще все GET-том пихать?
Совершенно верно.
Есть простое правило:
Если данные на сервере после отправки формы не меняются, то надо использовать GET. Ты верно подметил - во всех поисковых системах это так.
Если данные на сервере меняются, то:
1. Использовать метод POST
2. после обработки данных, сделать перенаправление (естественно, ГЕТом, постом сделать все равно невозможно), куда-нибудь, хоть на самого себя.
Это делается для того, чтобы исключить ненужные вопросы при нажатии кнопок "назад" и "обновить", а так же чтобы при обновлдении данные не слались повторно.
Учил. Много читал. Ответа на мой вопрос не нашел,
Дык. об том и речь - нету его там.
 

Alien

Новичок
ЭЭ.
1. Если шлет If-modified-since: то или reload ткнул или второй раз на ту же страницу, а умный браузер перепроверяет.

2. Если шлет Cache-control то нажал <ctrl> Reload - имхо этот случай тебе и нужно ловить.

Есть два плагина под mozilla и msie - см. ссылки на http://ice.nice.ru/ - поизучай что передается, много вопросов исчезнет.
 

Bermuda

Новичок
Автор оригинала: Альен
2. Если шлет Cache-control то нажал <ctrl> Reload - имхо этот случай тебе и нужно ловить.
Именно.

Автор оригинала: Альен
Есть два плагина под mozilla и msie - см. ссылки на http://ice.nice.ru/ - поизучай что передается, много вопросов исчезнет.
Спасибо. Помогло. IE шлет HTTP заголовок "Cache-Control: no-cache". Это частично решает вопрос. Альтернативным браузерам придется довольствоваться временем жизни страницы в кэше.
 
Сверху