J'ai fait une connexion, qui définit un cookie avec une valeur de l'adresse e-mail imputée, donc dans le fichier global.php, il stocke un tableau des données des utilisateurs en utilisant:
$email = $_COOKIE["PeopleHub"];
$getuserdata = mysqli_query($con, "SELECT * FROM Earth WHERE email='$email'");
$userdata = mysqli_fetch_array($getuserdata, MYSQLI_ASSOC);
Le cookie n'est pas installé, je le sais car j'ai fait un fichier test:
echo $_COOKIE["PeopleHub"];
Il vient de faire une page blanche.
Le code de connexion (où le cookie est installé):
<?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>
Vous devez définir des cookies avant l'envoi des en-têtes.
De le manuel :
setcookie () définit un cookie à envoyer avec le reste des en-têtes HTTP. Comme les autres en-têtes, les cookies doivent être envoyés avant toute sortie de votre script (il s'agit d'une restriction de protocole). Cela nécessite que vous passiez des appels à cette fonction avant toute sortie, y compris les balises et ainsi que tout espace.
Cela signifie que vous devrez examiner tampon de sortie si vous souhaitez utiliser ce code tel quel.
<?php
ob_start();
echo "Hello\n";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
Selon le contenu de global.php
, Cela peut fonctionner pour vous. Tout ce que j'ai fait a été de supprimer toute sortie avant d'appeler setcookie()
. Si global.php
Contient des espaces blancs ou une sortie HTML, cela ne fonctionnera pas:
<?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>
Je voulais juste souligner que j'avais un problème avec setcookie qui ne fonctionnait pas. Lorsque j'ai approfondi le fichier, il a été codé en UTF-8 avec BOM. Quand je l'ai ré-encodé en UTF-8 sans setcookie BOM, cela a bien fonctionné, donc la BOM était en cours d'écriture avant que ma première balise php ne soit rencontrée. Je suppose que l'activation de la mise en mémoire tampon dans mon fichier php.ini résoudrait probablement cela aussi.
Quelqu'un pourrait éventuellement trouver ces informations utiles.
J'ai eu un autre problème avec la mise à jour des cookies en utilisant la fonction setcookie.
J'ai donc défini une chaîne de cookies faite à partir d'un tableau à l'aide de la fonction de sérialisation php. À partir de maintenant, je ne pouvais pas mettre à jour cette fonction cookie - setcookie ne fonctionnait tout simplement pas, si la configuration de la chaîne sérialisée ou de toute autre chaîne simple était en cours.
Ensuite, j'ai mis un autre cookie avec une nouvelle clé de cookie, cette fois les données ont été encodées avec la fonction json_encode. Cette fois, j'ai pu installer le cookie et le mettre à jour :-)
J'ai eu le même problème et il s'est avéré que cela était dû au fait que le domaine que je transmettais à la fonction avait un port personnalisé (ce qui n'est pas autorisé).