Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > location против кэширования


Автор: bars80080 1.3.2011, 16:01
возникла такая проблемка.

на сайте есть форма авторизации: жмём кнопочку, она выскакивает посредством javascript. вводим логин-пароль, жмём сабмит, данные методом post идут на сервер. если всё хорошо, то сервер выдаёт:

Код

header('Location: '.$backurl); exit;


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

можно было бы конечно присоединить к $backurl.'?time=123456789' , но это не решит проблемы. так как пользователь может перейти по другом пункту меню, а затем вернуться. да и прочие пункты меню после авторизации могут выглядеть по другому.

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

есть ли такая возможность? как поступить в таком случае?

Автор: нуп 1.3.2011, 16:24
Может делать редирект на js ? После запроса авторизации приходит допустим sucesfull = 1, и js делает свое коварное дело  smile 

Автор: bars80080 1.3.2011, 16:38
а как это решит проблему с закэшированными страницами?

Автор: gta4kv 1.3.2011, 16:41
Cache-control: no-cache
Cache-control: no-store
Pragma: no-cache
Expires: 0

?

Автор: bars80080 1.3.2011, 16:58
это изначально ставить на все страницы? но тогда отрубится кэш вообще, как я понимаю?
или только перед header('Location: ') ? но тогда он отменит кэш только только для одной страницы, и как я понимаю именно той, на которой пользователь находится в данный момент, а это авторизационная страница site.ru/auth/, а не та, с которой он пришёл

Добавлено через 35 секунд
а каков механизм здесь, на форуме?
как я понимаю, тут просто нет кэша?

Автор: gta4kv 1.3.2011, 17:27
Кстати, я не понял проблемы с:
 
Цитата
можно было бы конечно присоединить к $backurl.'?time=123456789' , но это не решит проблемы. так как пользователь может перейти по другом пункту меню, а затем вернуться. да и прочие пункты меню после авторизации могут выглядеть по другому.

Ты откидываешь пользователя на новую страницу (не из кэша), куда он там не туда нажмет?

Автор: bars80080 1.3.2011, 17:56
Цитата(gta4kv @  1.3.2011,  16:27 Найти цитируемый пост)
Ты откидываешь пользователя на новую страницу (не из кэша), куда он там не туда нажмет? 

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

получается, надо всем ссылкам цеплять ?time=123456789 , но это как-то топорно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)