Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2006, 00h38   #1
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Par défaut [Cookies] non destruction d'un cookie de session

Bonjour,

J'ai le problème suivant :
- Je créé une session avec session_start().
- Je déconnecte l'utilisateur en faisant sur la page deconnexion.php :
Code :
1
2
3
4
5
6
if( isset( $_COOKIE[ session_name() ] ) )
{
  //on détruit la session
$_SESSION = array();
session_destroy();
}
Sur la page identification.php, j'ai ça :
Code :
1
2
3
4
if( isset( $_COOKIE[ session_name() ] ) )
{
    die(header('Location: compte-accueil.php'));
}
Et bien après la déconnexion, le header est encore effectué, ce qui n'est plus le cas si je vide manuellement les cookies ou si le gars ne s'est pas encore connecté et n'a donc ouvert aucune session.

Pourquoi ?

Je me suis dit qu'il fallait aussi détruire le cookie, et donc j'ai fait ça, juste en dessous de session_destroy() dans la page deconnexion.php :
Code :
setcookie('session_name()')
Mais j'obtiens ça :
Code :
1
2
3
4
5
 
Warning: Cannot modify header information 
- headers already sent by (output started at /home.2/site/www/deconnexion.php:8)
 in /home.2/site/scripts/compte/compte/deconnexion.php on line 42
supprime cookei
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 01h08   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Le cookie n'est pas détruit avec session_destroy, cependant les données de sessions le sont (donc tout ce qui sert à l'identification etc...)

le cookie débouche sur une session invalide, ce n'est pas grave, t'en fait pas

tu devrais plutôt baser ta destruction de session sur par exemple
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 01h29   #3
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon bah je suis une tâche, sans nul doute.

J'ai commis ça :
Code :
1
2
3
4
5
6
7
if( count($_SESSION) > 0 )
{
  //on détruit la session
$_SESSION = array();
session_destroy();
  setcookie('session_name()'); // exemple 1
}
Et puis ça :
Citation:
if( count($_SESSION) > 0 )
{ setcookie('session_name()'); // exemple 1
//on détruit la session
$_SESSION = array();
session_destroy();
}
Je me suis dit qu'en mettant setcookie('session_name()') avant de détruire la session ça changerait quelque chose... Au fait pour quoi session_name(), ça a un nom une session ? Et pourquoi count($_session)
? ça se compte les sessions, il peut y en avoir plusieurs ?

Dans les deux cas, j'ai bien sûr obtenu ça :
Code :
1
2
3
4
5
6
Warning: 
Cannot modify header information - 
headers already sent by 
(output started at /home.2/site/www/deconnexion.php:8) in /home.2/site/scripts/compte/compte/deconnexion.php 
on line 38
supprime cookei


**edit**
j'ai même essayé ça eheh, mais c'est pareil
Code :
1
2
3
4
5
6
7
8
9
10
if( count($_SESSION) > 0 )
{ setcookie('session_name()');}
 
if( isset( $_COOKIE[ session_name() ] ) )
{
  //on détruit la session
$_SESSION = array();
session_destroy();
  // exemple 1
}
**edit2**
Et je viens de réessayer ça :
Code :
1
2
3
4
5
6
7
8
9
if( isset( $_COOKIE[ session_name() ] ) )
{
  //on détruit la session
$_SESSION = array();
session_destroy();
  // exemple 1
}
if( count($_SESSION) == 0 )
{ setcookie('session_name()');}
Sauvage, n'est-il point ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 07h46   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
dans tous les cas c'est
Code :
setcookie(session_name());
sinon tu va modifier le cookie qui a le nom "session_name()"

mais faire appel à session_name réouvre une session en plus il me semble... donc celle là était bien je crois :

Code :
1
2
3
4
5
6
7
if( count($_SESSION) > 0 )
{
setcookie(session_name()); // exemple 1
//on détruit la session
$_SESSION = array();
session_destroy();
}
une session a un nom parce que tu peux en effet créer des sessions avec des noms différents, généralement, le standard, c'est PHPSESSID je crois, mais tu peux le modifier, si tu dois utiliser les sessions en plusieurs endroits, par exemple pour un forum et pour un site de commerce en ligne, tu peux utiliser deux sessions différentes (c'est à mon avis pas super utile mais bon), on peut voir ça comme une protection contre le vol de session : si vol de session il y a, il restera local au forum (ou au site)
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h09   #5
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon alors je viens de réessayer, mais j'obtiens toujours :

Code :
1
2
3
4
Warning: Cannot modify header information - 
headers already sent by (output started at /home.2/site/www/deconnexion.php:8) 
in /home.2/site/scripts/compte/compte/deconnexion.php 
on line 41
La ligne 41 étant celle-ci :
Code :
setcookie(session_name());
Le script de déconnexion est en milieu de page, et tout en haut j'ai cela :
Code :
1
2
3
4
5
6
<?php
if( isset( $_COOKIE[ session_name() ] ) )
{
    session_start();
}
?>
Sans la ligne setcookie(session_mame()); ça fonctionne bien, si ce n'est que le cookie n'est pas supprimé (donc ça ne fonctionne qu'à moitié bien, ou a moitié mal au choix. ).
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h10   #6
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Ah !

c'est cette erreur là encore qui te gène...

setcookie envoie un header, donc comme pour session_start et header...

faut que rien n'ai été envoyé au navigateur avant... => dans ce cas, c'est fait à la ligne 8...
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h29   #7
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Hum...
Donc j'ai ça tout en haut de la page, maintenant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
if( isset( $_COOKIE[ session_name() ] ) )
{
    session_start();
}
 
if( count($_SESSION) > 0 )
{
setcookie(session_name()); // on détruit le cookie
//on détruit la session
$_SESSION = array();
session_destroy();
}
==> ça a l'air bon, pas de message d'erreur dans la page.
Je change de page.
J'obtiens une erreur un peu plus exotique, tout en haut de la page :

Code :
1
2
3
4
5
6
7
8
9
Warning: session_start(): 
The session id contains invalid characters, 
valid characters are only a-z, A-Z and 0-9 
in /home.2/site/www/index.php on line 4
 
Warning: session_start(): Cannot send session cache limiter - 
headers already sent 
(output started at /home.2/site/www/index.php:4) 
in /home.2/site/www/index.php on line 4
Sachant qu'en haut des pages, j'ai cela :
Code :
1
2
3
4
if( isset( $_COOKIE[ session_name() ] ) )
{
    session_start();
}
Et le message d'erreur est maintenant sur toutes les pages.
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h33   #8
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon apparemment j'avais mal détruit le cookie, ça ne fait plus le message d'erreur si je fais ça :
Code :
setcookie(session_name(), '', 1 );
Pourtant, les deux solutions devraient être pareilles :
Code :
1
2
3
4
5
6
7
8
<?php
  /*
   * Les deux exemples suivants sont équivalents
   */
  setcookie('cookie_name'); // exemple 1
 
  setcookie('cookie_name', '', 1); // exemple 2
?>
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h39   #9
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
ton problème d'effacement vient peut-être de ceci:
Citation:
Envoyé par php.net
Les cookies doivent être effacés avec les mêmes paramètres que ceux utilisés lors de leur création. Si l'argument value est une chaîne vide ou vaut FALSE et quelques autres arguments sont exactements les mêmes que lors du positionnement du cookie, alors le cookie sera effacé du client.
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h44   #10
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Salut professeur Tournesol,

Comme j'ai dit le problème me parait résolu depuis que j'ai ajouté un paramètre dans setcookie().

Par contre je reconnais que j'aimerais bien connaitre la différence entre un cookie et un cookie de session, puisque apparemment ça ne se créée pas de la même manière et ne se "sniffe" pas de la même façon non plus.
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h51   #11
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
Citation:
Envoyé par psychoBob
Salut professeur Tournesol,

Comme j'ai dit le problème me parait résolu depuis que j'ai ajouté un paramètre dans setcookie().
autant pour moi, j'ai lu trop vite
Citation:
Envoyé par psychoBob
Par contre je reconnais que j'aimerais bien connaitre la différence entre un cookie et un cookie de session, puisque apparemment ça ne se créée pas de la même manière et ne se "sniffe" pas de la même façon non plus.
comme dit dans ton poste sur le sujet, un cookie de session, stocké en mémoire chez le client, ne contient QUE le session_id; un cookie "normal" est un fichier physique ouvrable avec un bête éditeur de texte qui contient des noms de variables associés à leur valeur...
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h02   #12
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Et donc même si on force le passage de l'id de session en cookie, les variables de session restent sur le serveur c'est bien cela ?

Mais au delà de ce qu'ils contiennent, qu'est ce qui distingue le cookie et le cookie de session ? Tu dis que le cookie de session est "stocké en mémoire chez le client". Cela n'est pas le cas pour le cookie normal ?
Pourquoi ne peut-on pas ouvrir le cookie de session avec un éditeur de texte comme tu dis que l'on peut le faire pour un cookie "normal" ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h13   #13
Membre confirmé
 
Avatar de spilliaert
 
Inscription : septembre 2005
Messages : 270
Détails du profil
Informations personnelles :
Âge : 20
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 270
Points : 227
Points : 227
Citation:
Envoyé par psychoBob
Pourquoi ne peut-on pas ouvrir le cookie de session avec un éditeur de texte comme tu dis que l'on peut le faire pour un cookie "normal" ?
car le cookie de session, qui ne contient que l'id de session, ce n'est pas un fichier, c'est juste une petite partie de mémoire du navigateur client qui contient un numéro...
Citation:
Envoyé par psychoBob
Mais au delà de ce qu'ils contiennent, qu'est ce qui distingue le cookie et le cookie de session ? Tu dis que le cookie de session est "stocké en mémoire chez le client". Cela n'est pas le cas pour le cookie normal ?
non, cookie "normal" est un FICHIER, par ex:
Citation:
C:\Documents and Settings\Propriétaire\Cookies\propriétaire@developpez.com[2].txt
spilliaert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 13h20   #14
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Ah d'accord c'est bien plus clair, merci pour vos explication, professeur Tournesol.

Cela étant pourquoi ont-ils nommés les cookies de session des cookies, puisqu'ils diffèrent des...cookies ?

Encore un coup de Rastapopoulos ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h13.


 
 
 
 
Partenaires

Hébergement Web