Лучший захват для идентификатора партнерской сессии из GET в PHP

Может ли кто-нибудь помочь мне разобраться в этом и сделать его более логичным? Я сейчас зажарен и не могу написать хорошую строчку кода:)

Я пытаюсь получить партнерский идентификатор из URL-адресов, как? Aid=3056677. Идея состоит в том, что IF aff id устанавливается в GET, который имеет приоритет, сеанс и, наконец, cookie с наименьшим количеством. Кроме того, мы не хотим устанавливать аффидный идентификатор, который не существует.

Знаете ли вы о более проверенном и верном способе сделать это?

session_start(); // start session

// affiliate id
$g_aid = (isset($_GET['aid']) && $_GET['aid'] != '') ? trim($_GET['aid']) : false;
$s_aid = (isset($_SESSION['aid']) && $_SESSION['aid'] != '') ? trim($_SESSION['aid']) : false;
$c_aid = (isset($_COOKIE['aid']) && $_COOKIE['aid'] != '') ? trim($_COOKIE['aid']) : false;

if($g_aid !== false) // use get if set
  $aid = $g_aid;
elseif($s_aid !== false) // next use session if get not set
  $aid = $s_aid;
elseif($c_aid !== false) // cookie
  $aid = $c_aid;
else
  $aid = ''; // leave it empty

// if $aid is set is it in the $affiliates array?
//If not use the first key from that array
$aid = (isset($affiliates[$aid])) ? $aid : key($affiliates);

// save it and set it
// (maybe shouldn't be done if already stored?
setcookie('aid', $aid);
$_SESSION['aid'] = $aid;

3 ответа

Решение

Спасибо, ребята, это выглядит все лучше и лучше. Один момент, который может прояснить для вас, это то, что если в GET указан идентификатор, он ДОЛЖЕН быть действительным, прежде чем мы сможем стереть чужой идентификатор. Деньги связаны с каждой транзакцией, и мы хотим, чтобы партнер получал кредит как можно дольше.

относительно empty это не слишком полезно, поскольку пробелы дурачат его. Поэтому, если вы не урежете его перед использованием, я чувствую, что оно недостаточно точное. Так что я не знаю о пустом для GET. Это нормально для остальных, потому что мы уже проверили их.

Вот что у меня так далеко от вашей помощи (разве сложная троичная часть разрушается, когда находит истину? Я не хочу, чтобы она продолжала выполнять строку):

session_start(); // start session

  $aid = !empty($_GET['aid'])     ? trim($_GET['aid']) :
         !empty($_SESSION['aid']) ? $_SESSION['aid'] : 
         !empty($_COOKIE['aid'])  ? $_COOKIE['aid'] :
         '';

  // use first key from array if aid not set
  if(!isset($a[$aid])) $aid = key($a);

  if(!isset($_SESSION['aid']) || $aid != $_SESSION['aid'])
  {
    setcookie('aid', $aid);
    $_SESSION['aid'] = $aid;
  }
session_start();

// checks if a field is valid
function isValid($aid) {
    return (!empty($aid) && trim($aid) != '');
}

// set the affiliate ID
$aid = isValid($_GET['aid'])     ? $_GET['aid'] :
       isValid($_SESSION['aid']) ? $_SESSION['aid'] : 
       isValid($_COOKIE['aid'])  ? $_COOKIE['aid'] :
       '';

// use first key from array if aid not set
if (!isset($affiliates[$aid])) $aid = key($a);

// save and set 
setcookie('aid', $aid);
$_SESSION['aid'] = $aid;
  1. Зачем вам проверять наличие сессии и cookie, если у вас есть действительный affiliateID из массива $_GET? ==> Сделайте его прогрессивным, чтобы сеанс проверялся только в том случае, если GET не был найден, а cookie проверялся только в том случае, если сеанс не был найден.

  2. Не повторяйте валидацию affiliateID. ==> Напишите функцию проверки и используйте ее повторно, возможно, вы захотите добавить больше правил позже.

  3. Используйте фигурные скобки, чтобы сделать ваш код более читабельным

  4. $ aid или $ aff - это плохие имена переменных, а $affiliateID - ХОРОШЕЕ! Вы ничего не выигрываете для написания коротких имен переменных, но вы выигрываете много с написанием понятного кода.

Плохой пример, не говорит

if (validate($aff)) 

Хороший пример, говорит с вами

if (isValid($affiliationID))

Итак, мое предложение по смене основных компонентов:

if (isValid($_GET['aid']))
{
    $affiliationID = trim($_GET['aid'];
}
else if (isValid($_SESSION['aid']))
{
    $affiliationID = trim($_SESSION'aid'];
}
else if (isValid($_COOKIE['aid']))
{
    $affiliationID = trim($_COOKIE['aid'];
}
else
{
    throw new Exception('No affiliation ID defined');
}

function isValid($affiliationID)
{
    if (empty($affiliationID))
    {
        return false;
    }
    else
    {
        return true;
    }
}
Другие вопросы по тегам