ホームページ >バックエンド開発 >PHPチュートリアル >PHP で setcookie() を使用して設定したにもかかわらず、「username2」Cookie が空白になるのはなぜですか?

PHP で setcookie() を使用して設定したにもかかわらず、「username2」Cookie が空白になるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-22 00:15:11517ブラウズ

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

セッション処理による空の Cookie のトラブルシューティング

提示された PHP 関数では、ユーザー検証プロセスに「ユーザー名」と「」の両方の Cookie の設定が含まれています。 setcookie() を使用して username2 '。ただし、「username2」Cookie を取得すると、空白のままになります。この問題はさまざまな理由で発生する可能性があります。

Cookie 構成が不完全である

setcookie() 構成全体に必要なパラメータが含まれていることを確認してください:

  • Expires パラメータ: 有効期限を有効な形式で指定します。提供されているコードでは有効期限を 365 日に設定していますが、推奨される形式は time() n です。n は秒数です。
  • パス パラメーター: ソリューションで提案されているように、設定はpath = / により、Cookie が現在のディレクトリだけでなくサイト全体に適用されます。

出力修正

PHP マニュアルの警告「スクリプトからの出力の前に Cookie を送信する必要があります。」に注意してください。すでに送信されているヘッダーを防ぐために、Cookie を設定する前にエコーを避けてください。指定されたコードで、 echo $_COOKIE['username2'];出口(); header("Location: ../new.php"); の前に配置する必要があります。 line.

Validate 関数の最適化

validateUser() 関数は、ロジックやデータベース クエリを使用せずに、セッションとリダイレクトのみを設定するために使用する必要があります。ユーザー検証用と Cookie 設定用に別の関数を作成することを検討してください。

validateUser() 関数と Cookie 設定の最適化されたバージョン:

// 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);
        }
    }
}

以上がPHP で setcookie() を使用して設定したにもかかわらず、「username2」Cookie が空白になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。