Уважаемый diafan. После ОЧЕНЬ ДОЛГИХ мытарств я понял, что добиться помощи сложно и, уж извините, я взялся за проверку кода. Мне было понятно, что вся проблема в кешировании страниц, но где? Тут еще и Mozilla масла в огонь подлила.
Я взял за основу тот факт, что на других серверах CMS работала без проблем, в частности на McHost. Поскольку я использую площадку AVAhost я решил пойти от простого, т.е. запретить кеширование в домашнем каталоге сайта:
.htaccess
***************************************
Options -Indexes
Options +FollowSymLinks
ErrorDocument 404 /404.php
DirectoryIndex index.php index.html
AddDefaultCharset utf-8
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^(.*)404.php$ index.php?rewrite=404.php [QSA]
RewriteRule ^(.*)sitemap.xml$ index.php?rewrite=sitemap.xml [QSA]
RewriteRule ^(.*)/$ index.php?rewrite=$1 [QSA]
RewriteRule ^(.*)code/(.*)$ index.php?rewrite=code/$2 [QSA]
RewriteRule ^(.*)file/(.*)$ index.php?rewrite=file/$2 [QSA]
</IfModule>
<IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "now"
***********************************************************
Все заработало великолепно. НО..... Во-первых, резко снизилась скорость загрузки страницы, во-вторых, возросла нагрузка на BD, что меня в корне не устраивает. Конечно, если сервер ультрамощный, то можно было бы так и оставить, но мне, как-то показалось, что это не так. И я решил, все же, проверить код. Более всего меня заинтересовал файл init.php, а особенно та его часть, отвечающая за заголовки:
********************************************************************
...
/* получаем заголовки станицы */
function getHeaders(){
header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
header("Last-Modified: " .(!$this->timeedit? gmdate("D, d M Y H:i:s"): gmdate("D, d M Y H:i:s",$this->timeedit)) . " GMT");
header("Cache-Control: store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", FALSE);
header('Content-Type: text/html; charset=utf-8');
}
/*
Вроде все симпатично, однако согласно спецификации http://www.ietf.org/rfc/rfc2616.txt, а последние версии браузеров требуют ее строгого соблюдения, он все же должен выглядеть так:
header("Expires: " . date("r"));
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
Все заработало. УРА!!!! Но меня не покидал вопрос - почему не меняя кодинга на других хостах движок все же работает. Ответ оказался простым - при регистрации хостинга, изначально на некоторых хостах создается файл .htaccess с параметрами исключающими кеш родительского каталога.
Не смотря на все выше изложенное хочу сказать ДВИЖОК ОТЛИЧНЫЙ, а модификация кода - та рутина с которой web-разработчик будет сталкиваться постоянно. И это прекрасно - мозг не будет ржаветь🍻
Уважаемый diafan файл .htaccess я дописал. К моему сожалению результат не изменился. Но, что меня действительно удивляет, так это то, что все прекрасно работает в IE7. Неплохо (с небольшими багами) в Opera. Но чтобы в Mozilla была такая лажа?(!) Я понимаю так, во всех браузерах проблема должна вырисовываться одинаково, но этого не происходит. Поэтому вывод - проблема не в движке.🙅
Status: HTTP/1.1 200 OK
Date: Sun, 24 Jan 2010 10:25:23 GMT
Server: Apache/2.2.14 (Unix) mod_ssl/2.2.14 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
X-powered-by: PHP/5.2.12
Pragma: no-cache
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-control: store, no-cache, must-revalidate, post-check=0, pre-check=0
Set-cookie: SESS928edfe774d8a40b667a9580fb19b3c4=213a4e593949e4916debd833e1f1b5bf; path=/
Last-modified: Sat, 23 Jan 2010 13:39:40 GMT
Transfer-encoding: chunked
Content-type: text/html; charset=utf-8
На diafan мой домен http://sv-istochnik.com
Вот такие заголовки.
Я с Вами не спорю, проблема, по всей видимости, не в движке. Просто я пытаюсь докопаться до сути. Тут ведь вот какой фокус - если заходим на сайт через Mozilla то при попытке залогиниться, введенные данные "съедаются", но при переходе на другую страницу система выдает приветственное сообщение, ну а потом все, что писал выше.
Уважаемый diafan я постоянно использую хостинг http://www.avahost.ru/. Признаться очень им доволен. К слову С админом данного хостинга бились над данной проблемой почти сутки. Приведу лишь часть переписки, чтобы не посчитали за флуд:
************************************************************
Здравствуйте,
Какой кэш? кэш сессий?
На этом сервере нет кэширования, только кэш сессий, который включен у 99% серверов.
Все же Вы можете попробовать след. функцию для отключения кэширования:
<?php
function avahost_nocache()
{
header("Expires: Tue, 01 Jan 2001 06:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
?>
Если не помогает, дайте "кусок" кода для отладки
Спасибо
******************************************************************
После этого попытались воспользоваться директивой session.save_path, с
помощью которой решили задать собственный каталог для сохранения файлов
сессий. Результат не изменился.
Есть идея, на текущий момент, разбить registration.php на отдельные сегменты кода с целью обеспечения жесткого logout, но это пока в теории. Сам движок - прекрасный, спору нет, очень гибок, а редактирование содержимого выше любых похвал. Но это "суперкеширование" достало.
Уважаемые Господа. Возник вопрос, который я не могу разрулить. Я не знаю, имею ли я право задавать здесь технические вопросы и все же. У меня не происходит окончание сессии по кнопке \Выйти\. Не могли бы вы прояснить данную причину?
Смысл в том, что при разрыве сессии визуально вроде бы все происходит нормально, но если вернуться на посещенную страницу, появляется сообщение в форме регистрации, что пользователь вошел в систему с таким-то логином и паролем, т.е., как будто сессия и не прерывалась вовсе.