Welcome! Log In Create A New Profile

Advanced

Re: Изменить заголовок(и) set-cookie после получения ответа от backend'а

November 23, 2010 05:52AM
Здравствуйте, уважаемые автоматизаторы и веб-мастера!

Пока что не касаюсь вопроса кеширования - это будет следующим этапом.
Бьюсь с сессией и ПОЧТИ её ПОБЕДИЛ. Но, как всегда, есть "нюанс".
Читал много статей, где умные головы советуют не бороться с сессией.
Однако, меня мучает вопрос по отдаче статики без куков, но в тоже время без редиректов на другой домен и без потери функциональности от полного отказа от session_start().
[quote="Если сессия нужна всегда - тогда стартуйте ее всегда и НЕ боритесь с
сессионной кукой. Если сессия не нужна всегда - не стартуйте ее всегда
и, опять же НЕ боритесь с сессионной кукой."]
Такой вариант не канает - сессия в рамках одного и того же сайта где-то нужна, а где-то нет.
[/quote]
NGINX 0.7.64, FastCGI, eAccelerstor, memcached, JOOMLA 1.5.22.

В общем сделал так:

Предварительно в php.ini директиву session.cookie_path установил с пустым значением (было / ). Т.е. куки ставятся для того пути (каталога), который был запрошен, а не сплошняком на весь сайт.

[code]
server {
server_name www.domain.travel;
root /var/www/sites/domain.travel;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
fastcgi_hide_header "Set-Cookie";
valid_referers none blocked server_names *.domain.travel;

location / {
try_files $uri @not_found;
}

location /administrator {
index index.php;
error_page 403 =404;
try_files $uri/ @not_found;
fastcgi_pass_header "Set-Cookie";
location ~* /administrator/index2?\.php$ {
include /etc/nginx/fastcgi_default;
}
location ~* \.(css|js|gif|ico|jpg|png)$ {
rewrite ^ $scheme://static.simba.travel$request_uri permanent;
}
location ~* \.php$ {
error_page 404 = @not_found;
return 404;
}
}

location ~* \.php$ {
try_files $uri @not_found;
include /etc/nginx/fastcgi_default;
}

location ~* \.(css|js|gif|jpg|jpeg|png|ico|eot|svg|otf|ttf|woff|pdf|doc|xls)$ {
if ($invalid_referer) {return 404;}
expires 1d;
add_header Cache-Control public;
}

location @not_found {
include /etc/nginx/fastcgi_default;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param SCRIPT_NAME /index.php;
}
}

server {
server_name static.domain.travel;
root /var/www/sites/domain.travel;

access_log off;
log_not_found off;

fastcgi_hide_header "Set-Cookie";

location / {return 404;}

location ~* \.(css|js|gif|ico|jpg|png)$ {
expires max;
add_header Cache-Control public;
}
}
[/code]

Иными словами: заголовки с куками прячу для всего сайта, но выдаю куки для пути /administrator.
Чтобы можно было залогиниться и работать в админке сайта.
При навигации по статьям на морде сайта куков нет - отслеживаю через firebug и встроенные инструменты разработчика в Chrome.
Запросы статики по пути ~* /administrator/.*\.(css|js|gif|ico|jpg|png)$ перенаправляю в другой server, где куки выключены.
Обработку любых .php, кроме index.php и index2.php в админке запрещаю, а также просматривать структуру каталогов в адресной строке тоже запрещаю - все нах, на главную! Планирую для этого location включить SSL.
В остальных location всё стандартно. Куки вырублены.

Так вот, [b]нюанс в том[/b], что всё это прекрасно работает, до той поры, пока не появляется необходимость с морды сайта через форму методом POST отправить сообщение.
[b]Куки нужны, а КАК их включить ТОЛЬКО для этой формы (путь /booking.html) - не могу придумать.[/b]

[code]
<form action="/booking.html" method="post" name="emailForm" id="emailForm" class="form-validate">
бла-бла-бла
<input type="hidden" name="option" value="com_contact" />
<input type="hidden" name="view" value="contact" />
<input type="hidden" name="id" value="1" />
<input type="hidden" name="task" value="submit" />
<input type="hidden" name="85be079f0cc070e6c88692537fc8e31d" value="1" />
</form>
[/code]

Идеи такие:
1. Куки на уровне server НЕ отключать. В каждом location, где это нужно, подключать перловый модуль и парсить заголовки запросов клиентов и ответов FastCGI. Т.е. там, где не нужно ставить fastcgi_hide_header "Set-Cookie". А там, где куки нужны этим модулем вручную менять path на нужное значение путём использования $r->header_in(строка), $r->header_out(строка, значение).
Буду благодарен, если знающие люди подскажут, как конкретно это сделать, у самого опыта и знаний для написания этого кода не хватает.
В моём случае для этого дополнительно надо пересобрать nginx с поддержкой ngx_http_perl_module и ngx_http_ssi_module.

2. Куки на уровне server отключить. В нужных местах их генерить самостоятельно непосредственно в location. Только опять же не знаю, как в конфиг server воткнуть код php для генерации куки. Да и по-моему это бредовая идея. Если не ошибаюсь, куки обрабатывает php, а не nginx. Nginx их просто передаёт в заголовках.
Соответственно на месте php я бы сильно удивился, если бы при первом запросе сгенерил куку и передал бы её nginx'у для клиента. А nginx при следующем запросе от клиента попытался бы мне подсунуть совершенно другую "отсебятину", не соответствующую тому, что я передал ему для клиента в ответе на самый первый запрос. Если не прав, прошу меня поправить.

Прошу поделиться опытом, как сие дело успешно разрешить.
Subject Author Posted

Изменить заголовок(и) set-cookie после получения ответа от backend'а

Богун Дмитрий March 08, 2010 03:00PM

Re: Изменить заголовок(и) set-cookie после получения ответа от backend'а

Daniel Podolsky March 08, 2010 04:00PM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Богун Дмитрий March 08, 2010 05:02PM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Daniel Podolsky March 08, 2010 06:06PM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Богун Дмитрий March 09, 2010 05:00AM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Daniel Podolsky March 09, 2010 05:56AM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Богун Дмитрий March 09, 2010 07:14AM

Re: Изменить заголовок( и) set-cookie после получения ответа от backend'а

Богун Дмитрий March 10, 2010 02:22PM

Re: Изменить заголовок(и) set-cookie после получения ответа от backend'а

Dmitry Goryainov March 09, 2010 07:08AM

Re: Изменить заголовок(и) set-cookie после получения ответа от backend'а

roga_i_kopita November 23, 2010 05:52AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 331
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready