партнерская программа запись в куки

208
11 января 2018, 23:13

например в кабинете пользователя формируется реферальная ссылка mysite.ru/?ref=13 если пользователь перешел по этой ссылке на сайт, как записать ее в куки на 10 дней? и как запомнить если этот пользователь не зарегался на сайте сразу, а зашел через 8 дней и куки помнил что этот пользователь пришел от такого-то реферала

Answer 1

Очень просто. Алгоритм:

  1. Проверяем $_GET['ref'], запоминаем. Если есть - человек перешел по реферальной ссылке
  2. Проверяем текущее содержимое $_COOKIE['ref'], запоминаем. Если оно есть, значит человек уже заходил ранее по реферальной ссылке. Если его нет, но в GET у нас есть реферальная ссылка, то создаем запись в куках: саму реферальную ссылку, и дату/время входа по реферальной ссылке, в двух позициях, например $_COOKIE['ref'] для ссылки и $_COOKIE['ref_timestamp'] для даты/времени из функции time()
  3. Если имеет место вход по реферальной ссылке (сейчас в GET или раннее в COOKIE) - проверить дату из кукисов. На вопрос "как давно человек заходил по реферальной ссылке" вам ответит разность time() - $_COOKIE['ref_timestamp'], в секундах. Делим на (24*60*60) и получаем "дней назад"

Для справки:

  • Для записи куков используется setcookie, для чтения $_COOKIE['name']
  • Если у вас на сайте ЧПУ, обратите внимание на параметры path и domain у функции setcookie(), там есть подводные камни

Немного кода:

<?php
/* Куки передаются в заголовке HTTP, поэтому нужно предотвратить любой вывод в поток до того
 * как мы все закончим с заголовками */
ob_start();
$html = '';
/* Если есть реферальная ссылка в запросе */
if (isset($_GET['ref'])) {
    /* Создаем запись о реферальной ссылке и куках (на 8 дней) */
    $ref = $_GET['ref'];
    $expire = 8*24*60*60;
    setcookie('ref', $ref, time() + $expire);
    setcookie('ref_timestamp', time(), time() + $expire);
    $html .= '<p>Вы зашли по реферальной ссылке в запросе, ref='.$ref.'</p>';
}
/* Если есть реферальная ссылка в куках */
if (isset($_COOKIE['ref']) && isset($_COOKIE['ref_timestamp'])) {
    $ref = $_COOKIE['ref'];
    $html .= '<p>Вы уже заходили по реферальной ссылке в куках, ref='.$ref.', дата: '.date("Y.m.d H:i:s", $_COOKIE['ref_timestamp']).'</p>';
    /* Здесь вы можете проанализировать время входа и выполнить дополнительные действия */
}
/* Вывод */
print '<html><head><title>769191</title><meta charset="utf-8"></head><body>'.$html.'</html>';
/* Производим вывод в поток */
ob_flush();
?>

Обратите внимание, что куки отсылаются в ответе браузеру. То есть они появятся в $_COOKIE не сразу, а при следующем запросе от этого же браузера. Поэтому очень часто после установки куков делают перенаправление, даже на эту же страницу, чтобы обработать запрос уже с учетом куков

READ ALSO
Прибавить 7 дней к текущей дате

Прибавить 7 дней к текущей дате

Есть таблица, где имеется три поля с датамиДата добавления объявления, дата отправки и дата прибытия

155
Строки и их использование

Строки и их использование

Как лучше всего объявить строку и работать с ней:

215
Нарушение доступа для записи | C++

Нарушение доступа для записи | C++

Прошу помощи в решении данной проблемы

208