делюсь опытом
nolar 22.07.2004 14:24
1) response:location и response:refresh - взаимозаменяемые конструкции с небольшими различиями в понимании со стороны браузеров. использовать стоит только что-то одно
2) а теперь собственно опыт. использовать $response:что-то-там обновление НЕЖЕЛАТЕЛЬНО.
почему? объясняю: некоторые браузеры (конкретно тестировалось на opera 6.1 или 6.01 и частично на IE6) кешируют заголовки страниц и при повторный на них заход приводит к чтение заголовков с целью узнать дату изменения и тп файла из кеша. тупые браузеры, читая хеадеры из кеша, читают и рефреш, который при $response:* тоже передается хеадером. и переходят куда их посылали раньше, даже если в нынешний момент контент у страницы совсем другой. пример: страница защищенная паролем. если сессии нет - редирект на страницу входа. елси есть - вывод данных. заходим первый раз без сессии - получаем редирект в хеадере. идет по редиректу, логинимся и снова заходим на эту страницу. браузер видит редирект в хеадере и прется опять на логин пейдж, хотя сессия УЖЕ есть, и передана на страницу.
Рефрешы нужно делать тэгами <meta http-equiv="refresh" content="0; url=....">. Почему? Потому что они находятся В ТЕЛЕ страницы, и страбатывают только когда страница открыта. Они не кешируются в браузере и при проверке полей кеша не срабатывают. Единственное что может быть проблематично - решение о редиректе не всегда принимается в <head>...</head>, чаще в <body>...</body>. Но эот не особая проблема, так как большинство браузеров (вроде как все) по крайней мере в случае HTML (насчет XHTML не знаю) реагируют на <meta> независимо от их положения. ТО есть можно выводит и в <body>, хотя это не "по учебнику".
Вот мой оператор редирект (заметьте, если приспичит, вы всегда можете поменять способ редиректа по всему сайту, изменив только в операторе; если delay не задан, делает скрытый редирект хеадером; если задан, даже если 0 - метой):
@redirect[uri;delay][]
^if(!def $uri){$uri[$request:uri]}
^if(def $delay){
$result[<meta http-equiv="refresh" content="$delay^; url=^taint[as-is][$uri]">]
}{
$response:location[^taint[as-is][$uri]]
$result[]
}
Приятного аппетита :)
- Подскажите, как проще обойти расширение файла, MultiSync 21.07.2004 22:05 / 21.07.2004 23:18
- А зачем вам location и refresh одновременно? Чтобы уж наверняка? :) (-), Sumo [M] 21.07.2004 23:28
- Ответ, MultiSync 21.07.2004 23:52 / 22.07.2004 00:03
- делюсь опытом, nolar 22.07.2004 14:24
- ой, nolar 22.07.2004 14:25
- Ответ, Misha v.3 [M] 21.07.2004 23:27
- Для начала почитайте в документации про ^file:justname[] и ^file:justext[]. (-), Sumo [M] 21.07.2004 23:20
- Не пойму как из базы картинку вытащить, MultiSync 22.07.2004 00:14 / 22.07.2004 00:16
- О какой базе речь?, Sumo [M] 22.07.2004 09:44
- Помогите пожалуйста еще с одним вопросом, MULTISYNC 22.07.2004 16:30
- ответ, Никита Козин [M] 22.07.2004 17:00
- А тогда как эту колонку выбрать?, MultiSync 22.07.2004 17:20
- Думайте, Pavel Zagrebelin 22.07.2004 17:28
- Ответ, MultiSync 22.07.2004 17:41 / 22.07.2004 17:45
- Ответ, Pavel Zagrebelin 22.07.2004 17:48
- Ответ, MultiSync 22.07.2004 18:08 / 22.07.2004 18:12
- Ответ, Pavel Zagrebelin 22.07.2004 18:17
- Ответ, Pavel Zagrebelin 22.07.2004 18:12
- Помогите побороть неверный формат, MultiSync 22.07.2004 12:16 / 22.07.2004 12:18