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 22/05/2007, 09h51   #1
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Par défaut [Cookies] comment supprimer une session (cookie)

Bonjour,

Je passe par des sessions cookies (phpsessid) et je souhaiterais supprimer à la fois la session (ce que j'arrive) et le cookie de session ce que je n'arrive pas à faire.

Voila les lignes de codes que j'ai tester pour tenter de le détruire (sans succès) une par une (pas ensemble bien sûr !!!)

Code :
1
2
3
4
5
 
1) setcookie(session_name(PHPSESSID), "", time()-3600);
2) setcookie(session_name(), "", time()-3600);
3) setcookie("PHPSESSID", "", time()-3600);
4) $_SESSION = array();
merci de votre aide (car j'ai parcouru les tutos et je pensais faire comme indiqué mais il doit me manquer qqchose)

nb : je tourne en PHP5
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 09h54   #2
Membre confirmé
 
Avatar de max44410
 
Étudiant
Inscription : juin 2003
Messages : 426
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2003
Messages : 426
Points : 259
Points : 259
Envoyer un message via MSN à max44410 Envoyer un message via Skype™ à max44410
unset($_SESSION) ??
__________________
Venez voir par là...
max44410 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 10h04   #3
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par max44410
unset($_SESSION) ??
je ne sais pas, car j'ai lu que c'était fortement déconseillé dans le tutorial de developpez.com (voir le lien)

http://php.developpez.com/cours/sess...age=manip#L2.8

Si quelqu'un peut donner une piste ou confirmer l'information de max44410 le cas échéant (car dans ce cas, j'ai deux avis, un contraire et l'autre pour, avec un point d'interrogation)
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 10h06   #4
Membre confirmé
 
Avatar de max44410
 
Étudiant
Inscription : juin 2003
Messages : 426
Détails du profil
Informations personnelles :
Âge : 29

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2003
Messages : 426
Points : 259
Points : 259
Envoyer un message via MSN à max44410 Envoyer un message via Skype™ à max44410
Ahhh .. bah si c'est déconseillé faut pas le faire
je lancais juste une idée
__________________
Venez voir par là...
max44410 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 10h11   #5
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
pas de soucis, mais comme je ne suis pas un crack en session... je préfère poser la question...

j'attendrais une autre suggestion...
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 10h52   #6
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Ben je comprend pas trop ce que tu cherche a faire mais pour detruire une session complete:
session_destroy();
Et sinon pour détruire juste une variable de session:
session_unregister('nomdevariable');
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 11h57   #7
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par cerede2000
Ben je comprend pas trop ce que tu cherche a faire mais pour detruire une session complete:
session_destroy();
Et sinon pour détruire juste une variable de session:
session_unregister('nomdevariable');
je ne peux pas utiliser cette fonction car je suis en session_global et pas en register_globals.

Pour la session_destroy() ça marche mais je n'arrive pas a détruire la session cookie (PHPSESSID)....

Mais merci quand même...

Quelqu'un d'autre ?
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 12h22   #8
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
J'ai trouvé ceci:
Citation:
Pour faire une bonne déconnexion :

1) Supression des variables de session : unset($_SESSION['tac']);

2) Supression du cookie de la session : setcookie('PHPSESSID', FALSE);

3) Supression de la session : session_destroy();
Et unset est deconseillé juste si tu veut utiliser ta session apres...
Hors tu cherche a la detruire completement c'est donc comme ca qu'il faut faire
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 12h53   #9
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Bon j'ai testé mais cela ne fonctionne pas du tout, cela ne retire pas le cookie de session ni même le cookie que j'ai passé pour le username...

Donc voici le code de mon script de deconnexion...

nb : j'ai un cookie de session PHPSESSID
et un autre cookie qui se nomme : lien_perso_username.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
session_start();
include("../fonctions/top_page.php");
// test pour savoir si l'internaute est loggé
if(isset($_COOKIE[session_name()]))
    {
    unset($_SESSION['']);
    setcookie('PHPSESSID', FALSE);
    if(isset($_COOKIE[lien_perso_username]))
    	{
    	setcookie ("lien_perso_username", "", time() -3600);
    	print("le cookie est supprim&eacute;<br><br><br>");
    	}
 
	if (session_destroy()) 
		{
    	echo 'Session détruite !<BR>';
		}
	else 
		{
    	echo 'Erreur : impossible de détruire la session !';
		}
print("Vous &ecirc;tes d&eacute;connect&eacute;(e)<br><br>");
    }
else
	{
	print("Vous n'&ecirc;tes pas connect&eacute;(e)");	
	}
?>
voici le contenu de la page "top_page.php" pour information et qui fonctionne bien et permet de récupérer toutes les variables d'une page à l'autre sans problème.

Code :
1
2
3
4
5
6
7
8
9
10
<?
extract($_POST,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
extract($_GET,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
extract($_REQUEST,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
extract($_COOKIE,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
extract($_SERVER,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
if(isset($_SESSION['username']))
{
extract($_SESSION,EXTR_OVERWRITE);//Pour rŽcupŽrer les variables des requtes prŽcŽdentes
}?>
Je ne sais plus quoi faire.... mais je suis têtu !
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 12h57   #10
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
Eu en passant on ne met pas <? mais <?php
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h03   #11
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par cerede2000
Eu en passant on ne met pas <? mais <?php
ok j'ai noté, juste une question : pourquoi ? quelle est la différence, cela fonctionne bien sans aussi non ?! (et je ne veux surtout pas me prendre les foudres des puristes... )
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h16   #12
Membre expérimenté
 
Étudiant
Inscription : juillet 2004
Messages : 777
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2004
Messages : 777
Points : 527
Points : 527
En php web on doit mettre <?php <? c'est pour le php dans le pearl
cerede2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 13h43   #13
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par cerede2000
En php web on doit mettre <?php <? c'est pour le php dans le pearl
bon ben je viens d'apprendre une nouvelle chose aujourd'hui sur PHP, même si cela ne m'aide pas sur mon problème immédiat

__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h16   #14
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par cerede2000
Et sinon pour détruire juste une variable de session:
session_unregister('nomdevariable');
Fonction dépréciée voir le tutoriel cité plus haut !

Citation:
Envoyé par cerede2000
En php web on doit mettre <?php <? c'est pour le php dans le pearl
PEARL, késako ? C'est simplement par soucis de portabilité car l'emploi des balises courtes (<? et <?=) dépend du paramètre short_open_tag qui n'est pas toujours positionné sur On.

  • Utiliser extract sur les variables externes est dangereux puisque les variables peuvent être écrasées (par vous-mêmes ou quelqu'un de mal intentionné).
  • Sur cette ligne, il manque l'index :
  • PHPSESSID est le nom par défaut de la session, la fonction session_name permet d'obtenir le nom courant de la session.
  • Concernant la différence entre $_SESSION = array() et session_destroy : la première vide la session mais le fichier de stockage est conservé, la deuxième détruit en plus le fichier de stockage.
  • Est-ce que les paramètres au niveau du serveur/chemin sont strictement
    identiques à ceux du cookies de session ?
    Code :
    setcookie(session_name(), 0, time(), '/');
  • Voir aussi : la fonction session_regenerate_id
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h35   #15
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par julp
(...) C'est simplement par soucis de portabilité car l'emploi des balises courtes (<? et <?=) dépend du paramètre short_open_tag qui n'est pas toujours positionné sur On.
je vais faire attention de les mettre à partir de maintenant mais jusqu'ici pas de soucis.

Citation:
Envoyé par julp
(...)Utiliser extract sur les variables externes est dangereux puisque les variables peuvent être écrasées (par vous-mêmes ou quelqu'un de mal intentionné).
Que proposes-tu à la place d'extract ? J'ai trouvé cela très pratique et rapide pour la programmation, je n'avais pas pensé à la sécurité sur ce coup là !

Citation:
Envoyé par julp
(...)
Est-ce que les paramètres au niveau du serveur/chemin sont strictement
identiques à ceux du cookies de session ?
Code :
setcookie(session_name(), 0, time(), '/');
En effet ca fonctionne beaucoup mieux avec le chemin (va bien falloir que je me le mettre en 2 mètres par 2 mètres dans mon bureau, attention à ne pas oublier les chemins, j'arrête pas de les oublier ceux là)

Enfin, il vaut mieux tard que jamais mais j'ai quand même perdu un peu de temps avec ça.... donc un GRAND MERCI JULP ainsi que pour tes tutos... (au passage)

Citation:
Envoyé par julp
Voir aussi : la fonction session_regenerate_id[/list]
Je vais regarder cela dès que j'aurais un peu de temps.
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h17   #16
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Giantrick
Que proposes-tu à la place d'extract ? J'ai trouvé cela très pratique et rapide pour la programmation, je n'avais pas pensé à la sécurité sur ce coup là !
Je n'en doute pas mais vous revenez ainsi en arrière en simulant la fonctionnalité register_globals (autant la mettre à On en ce cas ). PHP vous fournit les tableaux superglobaux correspondant à chaque méthode ($_GET, $_POST, etc) donc pourquoi ne pas les utiliser directement ? Cela vous permet d'accéder uniquement aux données voulues : qui vous dit sinon qu'elle provient de la session, de l'url, d'un formulaire ou que l'une d'entre elle n'en écrase (ou exclut suivant l'option d'extract) pas une autre (vous pourriez ainsi passer des heures à chercher un bug).

Ecrire $_GET['foo'] au lieu de $foo n'est guère plus long à écrire et d'autre part facilite la compréhension du code (pensez à vos successeurs, nous qui vous dépannons et enfin vous-même !) : $foo sort en quelque sorte de nul part alors qu'il viendrait en réalité de la méthode GET. Si vous préférez cette écriture, je pense que vous pouvez trouver un compromis en préfixant vos variables :
Code :
1
2
extract($_GET, EXTR_PREFIX_ALL, 'g_');
echo $g_foo;
(le but étant d'avoir un préfixe propre à chaque méthode).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h28   #17
Membre habitué
 
Avatar de Giantrick
 
Inscription : janvier 2007
Messages : 269
Détails du profil
Informations personnelles :
Âge : 39

Informations forums :
Inscription : janvier 2007
Messages : 269
Points : 146
Points : 146
Citation:
Envoyé par julp
Je n'en doute pas mais vous revenez ainsi en arrière en simulant la fonctionnalité register_globals
Etant autodidacte en PHP, et bien que je me documente beaucoup, je n'avais pas pensé que c'était une faille importante... maintenant que vous me le détaillé, je comprend.

Citation:
Envoyé par julp
Ecrire $_GET['foo'] au lieu de $foo n'est guère plus long à écrire et d'autre part facilite la compréhension du code (pensez à vos successeurs, nous qui vous dépannons et enfin vous-même !) : $foo sort en quelque sorte de nul part alors qu'il viendrait en réalité de la méthode GET. Si vous préférez cette écriture, je pense que vous pouvez trouver un compromis en préfixant vos variables :
Code :
1
2
extract($_GET, EXTR_PREFIX_ALL, 'g_');
echo $g_foo;
(le but étant d'avoir un préfixe propre à chaque méthode).
Je vais donc reformater mon code pour les intégrer directement dedans via les $_GET et autres tableaux associés.

Merci pour les informations.
__________________
-----------------------------------------------------
- Etre clair dans sa demande, facilite les réponses.
- Organiser son travail et sa programmation est indispensable à une rapide évolution.
- Remercier ceux qui vous ont aider favorise le contact et augmente votre crédibilité.

Le géant du sud-ouest...
Giantrick 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 14h15.


 
 
 
 
Partenaires

Hébergement Web