Лучший захват для идентификатора партнерской сессии из GET в PHP - PullRequest
0 голосов
/ 14 января 2010

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

Я пытаюсь получить аффилированный идентификатор из 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 ]

3 голосов
/ 14 января 2010
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;
2 голосов
/ 14 января 2010
  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;
    }
}
0 голосов
/ 14 января 2010

Спасибо, ребята, это выглядит все лучше и лучше. Один момент, который может прояснить для вас, это то, что если в 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;
  }
...