1. ホーム
  2. php

[解決済み] PHP - setcookie(); が動作しない。

2022-02-11 18:37:09

質問事項

ログインの際、クッキーの値に推定されるメールアドレスを設定し、global.phpファイルにユーザーデータの配列を格納するようにしました。

$email = $_COOKIE["PeopleHub"];
$getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'");
$userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC);

クッキーが設定されていません。テストファイルを作ったのでわかります。

echo $_COOKIE["PeopleHub"];

白紙のページができただけ。

ログインコード(Cookieが設定される場所)です。

<?php 
include "global.php";    
?>
<h2>Login</h2>
<?php 
    echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. "; 
?>
<br>
<br>
<?php 
    if(isset($_POST["email"])){ 
        $email = $_POST["email"];
        $password = sha1($_POST["password"]);
        $check = mysqli_query($con, "SELECT * FROM Earth WHERE `email`='$email' AND `password`='$password'");
        $check = mysqli_num_rows($check);
        if($check == 1){
        setcookie("PeopleHub", $email, 0, '/');
        echo "We logged you in!";
        }
        else { 
            echo "We couldn't log you in!";
        }
    }
?>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
    Email <input name="email" placeholder="Email Address" required="" type="text"><br>
    Password <input name="password" placeholder="Password" required="" type="password"><br>
    <input type="reset" value="Start Over">
    <input type="submit" value="Login">
</form>

解決方法は?

クッキーを設定する必要があります。 前に ヘッダが送信されます。

から マニュアル :

setcookie() は、残りの HTTP ヘッダと一緒に送信されるクッキーを定義します。他のヘッダと同様、クッキーはスクリプトからの出力の前に送信されなければなりません (これはプロトコルの制限です)。そのため、この関数の呼び出しは、タグや空白を含むすべての出力の前に配置する必要があります。

これはつまり、次のことを調べる必要があるということです。 出力バッファリング このコードをそのまま使用する場合。

<?php

ob_start();
echo "Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

の内容によっては global.php は、この かもしれません。 が動作します。私がしたのは setcookie() が呼び出されます。もし global.php には空白やHTML出力が含まれているため、動作しません。

<?php 
include "global.php";    

    if(isset($_POST["email"])){ 
        $email = $_POST["email"];
        $password = sha1($_POST["password"]);
        $check = mysqli_query($con, "SELECT * FROM Earth WHERE `email`='$email' AND `password`='$password'");
        $check = mysqli_num_rows($check);
        if($check == 1){
        setcookie("PeopleHub", $email, 0, '/');
        echo "We logged you in!";
        }
        else { 
            echo "We couldn't log you in!";
        }
    }
?>
<h2>Login</h2>
<?php 
    echo "We currently have <b>" . $usercount . "</b> members, <b>" . $onlinecount . "</b> of which are online. "; 
?>
<br>
<br>
<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
    Email <input name="email" placeholder="Email Address" required="" type="text"><br>
    Password <input name="password" placeholder="Password" required="" type="password"><br>
    <input type="reset" value="Start Over">
    <input type="submit" value="Login">
</form>