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