toscho.design

Per Cookie aus der Statistik

Dies sei als Ergänzung des Artikels »Wie man sich selbst aus der eigenen Statistik heraushält« verstanden. Dort habe ich einen angepaßten User-Agent vorgeschlagen.

Bernhard Häussner hat ein sehr gute Alternative genannt: Einen besonderen HTTP-Header. Nun, genau dafür eignen sich Cookies gut.

Das könnte so aussehen: Man legt sich irgendwo eine Datei hin, die das spezielle Cookie erzeugt und fragt dieses später ab, wenn man den Tracking-Code einbaut.

<?php
/**
 * Setzt ein Cookie, das den Benutzer identifiziert.
 */
header('Content-Type: text/html;charset=utf-8');
// Wenn man auch Subdomains erfassen will, schreibe man ».example.com«
$domain     = $_SERVER['HTTP_HOST'];
// Passwort-Hash (md5). Bitte ändern!
$password   = '5319bef941e8a2099c98011b799c56c1'; // krafutzel
// Höchstmöglicher Wert des UNIX timestamps = 19. 01. 2038, 03:14:07
$expires = 2147483647;
// Wie soll das Cookie heißen?
$cookiename = 'excludeme';
$buttontext = array('Cookie setzen', 'Cookie löschen');
$now_button = $buttontext[(isset ($_COOKIE[$cookiename]) ? 1 : 0)];
$info = FALSE;
if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    if ( !isset ( $_POST['pass'] ) or ( md5($_POST['pass']) != $password ) )
    {
        $info = '<p>Gib das richtige Passwort an.';
    }
    if ( !isset ( $_POST['action'] ) )
    {
        $info = '<p>Drück den Button!';
    }
    // Cookie löschen
    if ( $buttontext[1] == $_POST['action'] )
    {
        $expires = time() - 3600;
        $info = '<p>Cookie wurde gelöscht.';
    }
    // Cookie anlegen
    elseif ( $buttontext[0] == $_POST['action'] )
    {
        $info = '<p>Cookie wurde angelegt.';
        $now_button = $buttontext[1];
    }
    setcookie($cookiename, 1, $expires, '/', $domain, FALSE, TRUE);
}
?>
<!Doctype html>
<title>Keksdose</title>
<?php
// Feedback
$info and print $info;
?>
<form method="POST" action="<?php print $_SERVER['REQUEST_URI']; ?>">
  <label for="pass">Passwort:</label>
    <input required name="pass" id="pass" type="password" size="20" autofocus>
  <input type="submit" name="action" value="<?php echo $now_button; ?>">
</form>
<?php
if ( isset ( $_COOKIE[$cookiename] ) )
{
    print '<h2>All deine Cookies für diese Seite:</h2><pre>'
        . var_export($_COOKIE, TRUE) . '</pre>';
}

Jetzt bindet man den Tracking-Code nur dann ein, wenn das Cookie fehlt – deshalb empfehle ich, den Cookienamen anzupassen.