5 votes

Définition de plusieurs cookies en PHP

Merci pour votre aide.

J'ai un script qui vérifie les ouvertures de session et définit ensuite certains cookies. Il y a 4 cookies qui sont définis, (plus tard, je vais probablement déplacer certains à la session du serveur, mais pour l'instant, j'utilise des cookies.

Le problème que je rencontre est que seuls les 2 premiers des 4 sont définis avant que le reste du script ne soit exécuté. Quelqu'un peut-il voir pourquoi ?

// If there is a row, and only 1 row, then the details are correct. Set the cookie and re-direct
            $row = mysqli_fetch_array($data);

            setcookie('user_id', $row['User_ID'], time()+ (60*15),"/");
            setcookie('user_name',  $row['UserName'], time()+ (60*15),"/");
            setcookie('access_Level', $row['Access_Level'], time()+ (60*15),"/");
            setcookie('db_con', $row['Db_Con'], time()+ (60*15),"/");

            $home_url = $link . "application/views/Dashboard.php";
            header('Location: ' . $home_url);

3voto

Jared Farrish Points 26391

Utilisation :

<?php

$row = array(
    'User_ID' => '1',
    'UserName' => '1',
    'Access_Level' => '1',
    'Db_Con' => '1'
);

setcookie('user_id', $row['User_ID'], time()+ (60*15),"/");
setcookie('user_name',  $row['UserName'], time()+ (60*15),"/");
setcookie('access_Level', $row['Access_Level'], time()+ (60*15),"/");
setcookie('db_con', $row['Db_Con'], time()+ (60*15),"/");

// This will not be set, and the cookie is not created.
setcookie('db_con2', $row['Db_Con2'], time()+ (60*15),"/");

?>

http://jfcoder.com/test/setcookie.php

Dans Firefox, je vérifie les cookies d'une page en faisant un clic droit sur la page, View Page Info , Security onglet, View Cookies bouton. Les quatre cookies apparaissent sur cette page dans mon navigateur. Le dernier ne l'est pas (puisqu'il n'a aucune valeur).

Je pense que les noms de vos colonnes ne sont pas orthographiés/capitalisés correctement, ou un autre problème, et que $row['Access_Level'] y $row['Db_Con'] sont des colonnes vides dans votre résultat.

0voto

Spudley Points 85371

Tout d'abord, la question évidente : Avez-vous essayé de copier les variables que vous sauvegardez dans les cookies et de les coller dans un fichier de type print_r() afin que vous puissiez prouver qu'ils ont les valeurs que vous attendez. Il est possible que vous ayez fait une erreur de frappe ou de capitalisation, ou quelque chose de similaire.

La prochaine chose à vérifier sont les valeurs de ces variables. Vous n'avez pas spécifié les valeurs possibles pour Access_Level y Db_Con mais s'ils sont réglés sur false ou vide, alors le cookie sera effacé, plutôt que d'être défini à cette valeur. Il est peu probable que ce soit ce que vous souhaitez.

Si ce n'est pas le problème, un autre problème possible (bien que j'en doute dans ce cas) est la longueur totale de vos cookies. Un site ne peut servir qu'un maximum de 4K dans sa chaîne de cookies. Si vous utilisez le codage UTF-8 (ce qui est recommandé), cela ne signifie qu'un millier de caractères environ, y compris tous les noms de champs et le formatage de la chaîne de cookies, ainsi que les valeurs. Les cookies dépassant cette longueur ne seront pas enregistrés. Il ne semble pas que ce soit votre problème ici, mais je suppose qu'il est possible que vous serviez d'autres cookies en plus de ces quatre, ce qui pourrait faire pencher la balance.

Je recommande aussi fortement de ne pas utiliser les cookies pour le type de données pour lesquelles vous les utilisez ici.

Il est important de savoir que les cookies sont un moyen très peu sûr de stocker des données. Ils peuvent être espionnés par des tiers et sont facilement modifiables. Si votre site s'appuie sur des Access_Level pour être précis lors des chargements de pages ultérieurs et l'utilise pour décider d'accorder ou non l'accès à certaines pages, alors vous avez donné à votre site une massif trou de sécurité.

Deuxièmement, les cookies sont inefficaces. La totalité de la chaîne de cookies est envoyée dans les deux sens pour chaque demande adressée au serveur. Cela inclut les graphiques et autres fichiers qui ne sont pas en mesure de les affecter réellement. Ainsi, si une page contient beaucoup d'images, de feuilles de style et de fichiers javascript qu'elle charge, vous enverrez tous vos cookies dans les deux sens, peut-être des dizaines de fois, chaque fois que l'utilisateur se rendra sur une nouvelle page.

Je recommande d'utiliser les sessions PHP à la place. Il est vrai qu'elles utilisent également un cookie, mais celui-ci ne contient aucune donnée pouvant être facilement manipulée, et il ne s'agit que d'une seule variable de cookie, ce qui minimise ces deux problèmes. C'est aussi extrêmement facile à utiliser.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X