Don Arana
Новичок
Cookie и htaccess - проблема!
Привет всем!
У меня вопрос - почему может некорректно работать функция setcookie при использовании правил модуля mod_rewrite в файле .htaccess (при создании ЧПУ).
Пример.
В начале каждого файла (index.php, price.php, product.php и basket.php) выполняется код на проверку существования cookie у пользователя. Код, подключаемый через require('./***/init.inc.php'). Естесственно, выполняется до вывода в браузер любого html.
Вот он:
#############################
Файл htaccess:
DirectoryIndex index.php
# Apache/PHP/site settings:
<Files ~ "\.inc.php$">
Order allow,deny
Deny from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymlinks
RewriteBase /alanda/
RewriteRule ^.htaccess$ - [F]
RewriteRule ^catalog[/]?$ price.php
RewriteRule ^catalog/([_a-zA-Z0-9]+)[/]?$ price.php?group=$1
RewriteRule ^catalog/([_a-zA-Z0-9]+)/([_a-zA-Z0-9]+)[/]?$ price.php?group=$1&vendor=$2
RewriteRule ^product[/]?$ product.php
RewriteRule ^product/([-_\sa-zA-Z0-9]+)[/]?$ product.php?articul=$1
</IfModule>
#############################
<b>Говоря конкретно и используя конкретный сайт</b>:
Как НЕ работает:
Идем по пути
<b>Товар</b>
http://www.alanda.ru/product/123/
Скрипт проверяет наличие куки test, не находит её, создает.
Обновляем страницу - записывает её в БД, выводит сообщение об этом.
Идем на страницу ->
<b>Каталог товаров</b>
http://www.alanda.ru/catalog/
Опа!
Как будто и не создавали куку!!!
Вариант с использованием прямых ссылок - всё работает! То есть:
Идем по пути:
<b>Товар</b>
http://www.alanda.ru/product.php?articul=123
Скрипт проверяет наличие куки test, не находит её, создает.
Обновляем страницу - записывает её в БД, выводит сообщение об этом.
Идем на страницу ->
<b>Каталог товаров</b>
http://www.alanda.ru/price.php
Все нормально! Проверяет, есть ли такая кука test, находит её в БД, выводит об этом сообщение.
И вообще, если не использовать ЧПУ, а только лишь обычные ссылки - все работает замечательно.
Обыскал и гугл, и форум. Никак не возьму в толк, в чем дело. Помогите пожалуйста!
P.S.: Да, конечно, мой код не безгрешен, пока только учусь. Но, как понимаю, тут дело в чем то глобальном. Но в чем?
Привет всем!
У меня вопрос - почему может некорректно работать функция setcookie при использовании правил модуля mod_rewrite в файле .htaccess (при создании ЧПУ).
Пример.
В начале каждого файла (index.php, price.php, product.php и basket.php) выполняется код на проверку существования cookie у пользователя. Код, подключаемый через require('./***/init.inc.php'). Естесственно, выполняется до вывода в браузер любого html.
Вот он:
PHP:
<?php
// Работа с куками
// qb_query - функция для выполнения mysql запросов.
if(!isset($_COOKIE['test'])) {
// кука на 90 дней
$cookie_life_time = time()+60*60*24*90;
$value = md5(time());
setcookie('test', $value, $cookie_life_time);
} else {
$kuka = $_COOKIE['test'];
// Есть ли кука в БД?
$kuka_qry = db_query("
SELECT
*
FROM
basket
WHERE
cookie = '$kuka'
");
$fch = mysql_fetch_array($kuka_qry);
// Если её нет в БД, то добавляем
if(!$fch) {
$insert = db_query("
INSERT INTO
basket(cookie)
VALUES('$kuka')
");
$kuka_t = "Вставили куку в БД. т.к. её там нет<br>";
} else {
$kuka_t = "Кука есть в БД<br>";
}
}
?>
Файл htaccess:
DirectoryIndex index.php
# Apache/PHP/site settings:
<Files ~ "\.inc.php$">
Order allow,deny
Deny from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine on
Options +FollowSymlinks
RewriteBase /alanda/
RewriteRule ^.htaccess$ - [F]
RewriteRule ^catalog[/]?$ price.php
RewriteRule ^catalog/([_a-zA-Z0-9]+)[/]?$ price.php?group=$1
RewriteRule ^catalog/([_a-zA-Z0-9]+)/([_a-zA-Z0-9]+)[/]?$ price.php?group=$1&vendor=$2
RewriteRule ^product[/]?$ product.php
RewriteRule ^product/([-_\sa-zA-Z0-9]+)[/]?$ product.php?articul=$1
</IfModule>
#############################
<b>Говоря конкретно и используя конкретный сайт</b>:
Как НЕ работает:
Идем по пути
<b>Товар</b>
http://www.alanda.ru/product/123/
Скрипт проверяет наличие куки test, не находит её, создает.
Обновляем страницу - записывает её в БД, выводит сообщение об этом.
Идем на страницу ->
<b>Каталог товаров</b>
http://www.alanda.ru/catalog/
Опа!
Как будто и не создавали куку!!!
Вариант с использованием прямых ссылок - всё работает! То есть:
Идем по пути:
<b>Товар</b>
http://www.alanda.ru/product.php?articul=123
Скрипт проверяет наличие куки test, не находит её, создает.
Обновляем страницу - записывает её в БД, выводит сообщение об этом.
Идем на страницу ->
<b>Каталог товаров</b>
http://www.alanda.ru/price.php
Все нормально! Проверяет, есть ли такая кука test, находит её в БД, выводит об этом сообщение.
И вообще, если не использовать ЧПУ, а только лишь обычные ссылки - все работает замечательно.
Обыскал и гугл, и форум. Никак не возьму в толк, в чем дело. Помогите пожалуйста!
P.S.: Да, конечно, мой код не безгрешен, пока только учусь. Но, как понимаю, тут дело в чем то глобальном. Но в чем?
