Heim >Backend-Entwicklung >PHP-Tutorial >Warum ist mein Cookie „Benutzername2' leer, obwohl es mit setcookie() in PHP gesetzt wurde?

Warum ist mein Cookie „Benutzername2' leer, obwohl es mit setcookie() in PHP gesetzt wurde?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-22 00:15:11524Durchsuche

Why is my 'username2' cookie blank despite setting it using setcookie() in PHP?

Fehlerbehebung bei leeren Cookies bei der Sitzungsverarbeitung

In der vorgestellten PHP-Funktion umfasst der Benutzervalidierungsprozess das Setzen von Cookies für „Benutzername“ und „ Benutzername2‘ mit setcookie(). Beim Abrufen des Cookies „Benutzername2“ bleibt es jedoch leer. Dieses Problem kann aus verschiedenen Gründen auftreten.

Unvollständige Cookie-Konfiguration

Stellen Sie sicher, dass die gesamte setcookie()-Konfiguration die erforderlichen Parameter enthält:

  • Expires-Parameter: Geben Sie die Ablaufzeit in einem gültigen Format an. Der bereitgestellte Code legt einen Ablauf von 365 Tagen fest, aber das empfohlene Format ist time() n, wobei n die Anzahl der Sekunden ist.
  • Pfadparameter: Wie in der Lösung vorgeschlagen, Einstellung path = / stellt sicher, dass das Cookie für die gesamte Website gilt, nicht nur für das aktuelle Verzeichnis.

Ausgabe Änderung

Beachten Sie die Warnung im PHP-Handbuch: „Cookies müssen vor der Ausgabe Ihres Skripts gesendet werden.“ Vermeiden Sie Echos vor dem Setzen von Cookies, um zu verhindern, dass bereits Header gesendet werden. Geben Sie im angegebenen Code echo $_COOKIE['username2']; Ausfahrt(); sollte vor dem Header platziert werden („Location: ../new.php“); Zeile.

Validate-Funktionsoptimierung

Die Funktion „validateUser()“ sollte nur zum Festlegen der Sitzung und Umleitung verwendet werden, ohne jegliche Logik oder Datenbankabfragen. Erwägen Sie die Erstellung einer separaten Funktion für die Benutzervalidierung und einer weiteren für das Setzen von Cookies.

Beispiel

Eine optimierte Version der Funktion „validateUser()“ und der Cookie-Einstellung:

// User validation function
function validateUser($username) {
    session_regenerate_id ();
    $_SESSION['valid'] = 1;
    $_SESSION['username'] = $username;
}

// Cookie setting function
function setCookies($username, $password) {
    setcookie('username', $username, time() + 60 * 60 * 24 * 365, '/');
    setcookie('password', $password, time() + 60 * 60 * 24 * 365, '/');
}

// Function call
if(mysql_num_rows($queryreg) != 0){
    $row = mysql_fetch_array($queryreg,MYSQL_ASSOC);
    $hash = hash('sha256', $row['salt'] . hash('sha256', $password));
    if($hash == $row['password']) {
        if($row['confirm'] == 1){
            setCookies($username, $password);
            validateUser($username);
        }
    }
}

Das obige ist der detaillierte Inhalt vonWarum ist mein Cookie „Benutzername2' leer, obwohl es mit setcookie() in PHP gesetzt wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn