Xpoint
   [напомнить пароль]

Вопрос по COOKIE

Метки: [без меток]
2010-04-07 14:33:56 [обр] Blademen[досье]

Здраствуйте.
В зависимости от того от куда пришел пользователь, показывать тот или иной текст, на той же странице. Затем хранить 20 дней.

  1. Если с SE (google, yandex...) попал на страницу index.php то показывать ("Техt")
  2. Если зашел прямо на index.php ("Техt1")

Делаю так:

***
setcookie("refferer", $_SERVER['HTTP_REFERER'], time() + 60 * 60 * 24 * 20); 
*** 
if(isset($_COOKIE['refferer']) || $_SERVER['HTTP_REFERER'] == "referer") 
 { 
  echo "Text"; 
 }
***

Text выводит только после релоада страницы. Как вывесть не делая релоад?

спустя 1 час 10 минут [обр] Филипп Ткачев(20/112)[досье]
Сначала обратите внимание на содержимое $_SERVER['HTTP_REFERER'].
preg_match вам в помощь
спустя 4 часа 41 минуту [обр] Blademen[досье]
if (isset($_COOKIE['refferer']) && preg_match('@^[^/]+://[^/]+@', $_COOKIE['refferer'], $match)) {
    // var_dump($match[0]);
    echo "Text"; 
}
"Text" выводит только после рефреша
спустя 2 часа 16 минут [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
спустя 1 час 34 минуты [обр] Blademen[досье]
Как вывести "Text" не использую
 header("Location:....) и Meta refresh
спустя 8 часов [обр] Филипп Ткачев(20/112)[досье]
Blademen[досье], когда приходят к вам из любого поисковика, $_SERVER['HTTP_REFERER'] постоянно меняется, т.к. это зависит от многих причин, например разных поисковых запросов.
Чтобы понять, как это работает в вашем файле нужно отключить все перенаправления: header("Location:....) и Meta refresh.
А чтобы не было сообщений посетителям, используйте простой, но полезный код:
echo '<!-- ';
print_r($_SERVER);
echo ' --> ';
спустя 2 часа 46 минут [обр] Blademen[досье]

Пока отбросим кусок задачи, а именно - Если с SE (google, yandex...)
То есть, не важно с какого поисковика человек попал.
Если есть $_COOKIE['refferer'] то выводить "Text"
Ели $_COOKIE['refferer'] пусто то выводить "Text1"

"Text" выводит только после рефреша. В доках по PHP написано, что cookies можно показать только после рефреша страницы.

Как это сделать без использования header("Location:....) и Meta refresh?

спустя 2 часа 2 минуты [обр] Филипп Ткачев(20/112)[досье]
Еще раз объясняю вам. Все гениальное элементарно просто!
  1. Проверяете наличие содержимого $_COOKIE['refferer'] и выводите "Text", иначе шаг 2.
  2. Анализируете $_SERVER['HTTP_REFERER'] с помощью регулярного выражения на переход с поисковой системы. Если был переход с нее, устанавливаете cookie и выводите соответствующий "Text", иначе шаг 3.
  3. Выводите "Text1".
спустя 7 часов [обр] Blademen[досье]
Если пришли с google или yahoo, должно выводить "Text"
Не получается сделать!
Если я прихожу с google.com, попадаю на страницу index.php, "Text" не выводиться. Как только делаю refresh страницы (F5) "Text" появляется.
То есть "Text" появляется только после рефреша.
function fromSE(){
  $ref = $_COOKIE['refferer'];
  $SE = array('google.com', 'yahoo.com');
  foreach ($SE as $source) {
    if (strpos($ref,$source)!==false) return true;
  }
  return false;
}  
if (function_exists('fromSE')) {
  if (fromSE()) {
    $se_Text='Text';
  }
} 

echo $se_Text;
спустя 34 минуты [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
мде..
спустя 10 часов [обр] Прокаев2(13/35)[досье]
Blademen[досье]
setcookie НЕ МЕНЯЕТ содержимого $_COOKIE
добавьте $_COOKIE['refferer']=....
спустя 1 час 7 минут [обр] Филипп Ткачев(20/112)[досье]

Blademen[досье], вам надо и куку проверять и наличие редиректа с поисковой системы.

Набросал вам тут (не проверял на ошибки)

$from_se=false;

// первый вход по ссылке с поисковой системы
$ref = $_SERVER['HTTP_REFERER'];
$SE = array('google.com', 'yahoo.com');
  foreach ($SE as $source) {
    if (strpos($ref,$source)!==false) $from_se=true;
  }
// предыдущая операция вернет ложь, если вы уже ходите по сайту
// поэтому проверим куку
if (isset($_COOKIE['refferer']) ) { 
 $from_se=true;
}
// если мы определили поисковик
if( $from_se) {
 // установка куки на неделю вперед (к примеру)
 setcookie('refferer','1',time()+0x093A80);
 echo 'Пришли из поисковика';
}
else {
 echo 'Так-так, поиск не юзаем...';
}
спустя 15 часов [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
Филипп Ткачев[досье]
Ему не надо ни того, ни другого сейчас. Все, что ему надо, это учить HTTP.
Без этого дальше станет еще сложнее...
спустя 2 дня 9 часов [обр] Филипп Ткачев(20/112)[досье]

Dennis F. Latypoff aka funky_dennis[досье], я думаю он уже ознакомился с http://www.phpfaq.ru/na_tanke , тем более, что использует подход с проверками существования функций. А знание протокола HTTP и работы клиент-серверной архитектуры это самая основа создания серверных скриптов. Без этого никак.

Blademen[досье], обязательно к прочтению и осознанию:
http://ru.wikipedia.org/wiki/HTTP
http://ru.wikipedia.org/wiki/HTTP-Cookie (тут даже в картинках все)

спустя 8 дней [обр] Blademen[досье]
Спасибо.
Powered by POEM™ Engine Copyright © 2002-2005