nostromo

nostromo
Рейтинг
6
Регистрация
22.01.2010
diafan:
Ух ты! Да, действительно, не только некоторые хостинги являются причиной проблемы, но и только мозилла... Может, какой-то параметр передается с хостинга, на который только мозилла реагирует? Хм...

Уважаемый 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>

<IfModule mod_expires.c>

ExpiresActive On

ExpiresDefault "now"

</IfModule>

***********************************************************

Все заработало великолепно. НО..... Во-первых, резко снизилась скорость загрузки страницы, во-вторых, возросла нагрузка на 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, а последние версии браузеров требуют ее строгого соблюдения, он все же должен выглядеть так:

********************************************************************

...

/* получаем заголовки станицы */

function getHeaders(){

header("Expires: " . date("r"));

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: no-store, no-cache, must-revalidate");

header("Pragma: no-cache");

header("Cache-Control: post-check=0, pre-check=0", FALSE);

header('Content-Type: text/html; charset=utf-8');

}

/*

...

********************************************************************

Все заработало. УРА!!!! Но меня не покидал вопрос - почему не меняя кодинга на других хостах движок все же работает. Ответ оказался простым - при регистрации хостинга, изначально на некоторых хостах создается файл .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

Вот такие заголовки.

Дело не в регистрации, дело в любых данных, использующих сессии, а это прежде всего корзина. Разбив registration.php проблему не решите однозначно.
Плюс ко всему, размышляя логически: если один и тот же скрипт нормально работает на 15 хостингах, и на 3-х не нормально, какой смысл ломать скрипт и подгонять его под 3 хостинга? Очевидно, что проблема в каком-то параметре на этих 3-х хостингах...

Я с Вами не спорю, проблема, по всей видимости, не в движке. Просто я пытаюсь докопаться до сути. Тут ведь вот какой фокус - если заходим на сайт через Mozilla то при попытке залогиниться, введенные данные "съедаются", но при переходе на другую страницу система выдает приветственное сообщение, ну а потом все, что писал выше.

diafan:
nostromo, вы на каком хостинге наблюдали проблему?

Уважаемый 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);

header("Pragma: no-cache");

}

?>

Если не помогает, дайте "кусок" кода для отладки

Спасибо

******************************************************************

После этого попытались воспользоваться директивой session.save_path, с

помощью которой решили задать собственный каталог для сохранения файлов

сессий. Результат не изменился.

Есть идея, на текущий момент, разбить registration.php на отдельные сегменты кода с целью обеспечения жесткого logout, но это пока в теории. Сам движок - прекрасный, спору нет, очень гибок, а редактирование содержимого выше любых похвал. Но это "суперкеширование" достало.

Уважаемые Господа. Возник вопрос, который я не могу разрулить. Я не знаю, имею ли я право задавать здесь технические вопросы и все же. У меня не происходит окончание сессии по кнопке \Выйти\. Не могли бы вы прояснить данную причину?

Смысл в том, что при разрыве сессии визуально вроде бы все происходит нормально, но если вернуться на посещенную страницу, появляется сообщение в форме регистрации, что пользователь вошел в систему с таким-то логином и паролем, т.е., как будто сессия и не прерывалась вовсе.

12
Всего: 15