Website Besucher identifizieren via Cookie und Token

Julian Lang
Julian Lang

12. Jul, 2022 | 1 Min. Lesezeit

Manchmal möchte man wissen, ob ein Website Besucher (Visitor) bereits auf deiner Website war und vielleicht sogar schon einige Aktionen ausgeführt hat, die man bereits abgespeichert hat.

Zum Beispiel um zu erfassen, ob ein Visitor bereits einen Post hochgevotet bzw geliked hat wie ich es in meinen Beitrag: Custom Upvote / Like Funktion für WordPress Posts erkläre. Dieser Beitrag ist zugleich die Vorbereitung für die Upvote Funktion.

Einen einzigartigen Token pro Visitor generieren

Wir benötigen einen einzigartigen String den wir einem Visitor via Cookie zuweisen. Dazu brauchen wir zunächst einen Token Generator.

Token Generator

function keygen() {
    $data = random_bytes(16);
    assert(strlen($data) == 16);

    $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80);

    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}

Diese Funktion wird einen zufälligen einzigartigen String ausgeben, der z.B. so aussehen kann: 3abc17d1-2a8e-4ad8-bea4-697d5a765e0c

Cookie setzen

Beim Erstaufruf eines Visitors wird mit dem folgenden Codebaustein ein Token generiert und der Cookie vt (visitor_token) gesetzt.

function set_cookie() {

    if (headers_sent()) return;
    // prüft ob Besucher ein Bot ist, wenn ja wird kein Token generiert / Cookie gesetzt
    $agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
    if (stripos($agent, 'Bot') !== false) {
        return;
    }

    // Visitor Cookie
    $visitor_cookie_set = 0;
    if ( isset( $_COOKIE['vt'] ) ) {
        $visitor_cookie_set= 1;
        if ( '' === trim($_COOKIE['vt']) ) {
            // Wenn Cookie gesetzt ist aber keinen Wert hat, wird er hier gelöscht.
            unset($_COOKIE['vt']);
            setcookie('vt', '', time() - 3600, '/');
            $visitor_cookie_set= 0;
        }
    }
    if ( 0 === (int) $visitor_cookie_set ) {
        // token wird generiert
        $token = keygen();
        // cookie 'vt' wird gesetzt
        setcookie( 'vt', $token, time()+YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
    }

}

add_action( 'init', 'set_cookie', -1 );

Deine Website Besucher erhalten jetzt einen Cookie für 365 Tage du kannst den Visitor nun wie folgt identifizieren:

if ( isset( $_COOKIE['vt'] ) ) {
    $visitor = $_COOKIE['vt'];
}

War der Beitrag hilfreich?

geschrieben von

Autor Avatar
Julian Lang

ist PHP / WordPress Entwickler. Arbeitet außerdem als Allrounder bei docrelations.de und entwickelt zwei coole Projekte: jadento.de | lifeisabinge.com

Schreibe einen Kommentar

© 2015 - 2022 | Julian Lang Webentwickler | WordPress Entwickler | Webdesigner