IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Les jetons pour sécuriser les formulaires contre des failles CSRF [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Les jetons pour sécuriser les formulaires contre des failles CSRF
    Comment je peux structurer mes pensées pour faire cela...


    ce que je fais :
    dans mon fichier où il y a les champs à remplir :
    1- L'initialisation de session (session_start())

    2- La génération du jeton ($token_jeton = md5(time()*rand(1,10))) et stockage de ce jeton dans la session

    3- Le stockage le timestamp correspondant au moment de la création du jeton

    4- la récupération du jeton ($token_jeton = $_SESSION['jtn_token'])

    5 - La création du formulaire (les champs à remplir, etc.)

    dans 2e fichier où je fais le traitement/enregistrement des données :

    A- La vérification du jeton : y a-t-il LE jeton dans cette session et dans ce fichier ?

    B- Cération de la condition : Si le même jeton entre la session et le formulaire
    b1- le stockage du 'timestamp' il y a 5 minutes ($ancien_timestamp = time() - (5*60))
    b2- si le jeton n'est pas expiré (if($_SESSION['jtn_token_time'] >= $ancien_timestamp))
    b3 - L'enregistrement de formulaire avec la connections à la BDD...
    C- Sinon écriture de message d'erreur

    D- la fermeture de session (session_destroy())

    E - L'effacement de la session (unset ($_SESSION)


    Est-ce que mon raisonnement est correct ?

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Ton raisonnement est correct.
    Par contre je ne trouve pas utile la destruction de la session.
    Surtout si tu as d'autres scripts qui l'utilise (notamment des scripts d'authentification justement...).
    Un unset($_SESSION['jtn_token']); suffit.

    Et n'oublie pas le session_start() sur le second fichier.

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Normalement le jeton ne devrait il pas être placé dans le formulaire (champ caché) pour ensuite être récupéré dans le 2ème fichier en GET ou POST afin de faire la comparaison entre sa valeur et celle dans la session ?

    Ceci n'a pas l'air d'être mentionné.
    Ou alors je fais erreur dans le principe.


    Citation Envoyé par transgohan
    Par contre je ne trouve pas utile la destruction de la session.
    Par précaution ne faudrait-il pas la détruire ?
    Sauf erreur toujours, si le jeton est non concordant, c'est qu'à l'origine (action précédente) l'action serait frauduleuse.
    Donc quelque part la création de la session qui pourtant est bonne (le bon utilisateur) serait indirectement usurpée.
    Il me semble que le but du pirate c'est de faire faire une action par un bon utilisateur à sa place, donc cette session serait quelque part frauduleuse.
    Enfin, c'est juste une réflexion je dirais.


    A coté de ça, un autre point non évoqué mais qui me parais important, c'est que la suite des traitements ne devraient pas se faire s'il y a une non concordance du jeton, car ce serait une action frauduleuse.

  4. #4
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Par précaution ne faudrait-il pas la détruire ?
    Sauf erreur toujours, si le jeton est non concordant, c'est qu'à l'origine (action précédente) l'action serait frauduleuse.
    Donc quelque part la création de la session qui pourtant est bonne (le bon utilisateur) serait indirectement usurpée.
    Il me semble que le but du pirate c'est de faire faire une action par un bon utilisateur à sa place, donc cette session serait quelque part frauduleuse.
    Enfin, c'est juste une réflexion je dirais.
    Ma phrase allait de mèche avec les phrases qui suivaient.
    Il est rare où la destruction de session est utile car la majorité des formulaire qui n'ont pas besoin de session active après sont pour des commentaires. Hormis cela tout le reste est généralement lié à un espace privé qui se base majoritairement sur l'utilisation de session.
    Dans ces cas là supprimer la session revient à détruire l'identification... Donc au final c'est arriver sur une page de connexion. Sauf que si la page de connexion utilise un système CRSF on va boucler à l'infini !

    Mais je suis d'accord sur le fait que si cela n'implique pas de problème avec le reste des systèmes du site il est préférable de supprimer la session.

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Il est vrai que je n'ai jamais vraiment pris le temps de simuler ce genre d'attaques, donc de voir explicitement comment ça réagit.
    Je tentes juste de l'imaginer, ce qui n'est pas l'idéal.

    Dans ces cas là supprimer la session revient à détruire l'identification... Donc au final c'est arriver sur une page de connexion. Sauf que si la page de connexion utilise un système CRSF on va boucler à l'infini !
    Oui, ça revient à détruire l'identification du bon utilisateur.

    Cependant, j'ai tendance à dire : A situation anormale, traitement spécial.
    Donc, si on détecte une anomalie venant du jeton, il ne faudrait pas rediriger vers une page d'identification, mais renvoyer une page d'erreur.
    Ceci paraitra surement déroutant pour l'utilisateur, mais il y a eu une tentative d'usurpation tout de même.

    Si l'utilisateur après cela tente de se ré-identifier, il devrait revenir dans une situation normale.
    Nouvelle session, nouveau jeton, donc pouvoir se ré-identifié.

    Qu'en penses tu ?

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Nouveau jeton je suis d'accord.
    Après pour la nouvelle session (dans le cas d'un formulaire d'identification) je ne suis pas sûr que cela apporte véritablement quelque chose. Une session sans rien dedans cela ne sert à rien, donc une nouvelle ou une ancienne vide ne change rien pour moi.

    Donc je dirai que cela dépend de ce que l'on veut vraiment, repartir d'un environnement entièrement neuf pour le nouvel essai ou non.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Après pour la nouvelle session (dans le cas d'un formulaire d'identification) je ne suis pas sûr que cela apporte véritablement quelque chose. Une session sans rien dedans cela ne sert à rien, donc une nouvelle ou une ancienne vide ne change rien pour moi.
    Oui, quelque part c'est vrai.

    De mon coté je me pose quand même quelques questions sur le quoi faire après détection d'une anomalie venant du jeton.
    Le minimum à faire c'est de détruire le jeton, ça me parais indispensable.

    Mais il faut quand même faire quelque chose d'autre non ?
    Soit pourquoi pas stopper le script (genre un exit()), ou rediriger vers une page d'erreur ou d'identification ?


    Ce que voulais dire en faite, c'est que si on supprime juste le jeton et qu'on laisse courir le script tel il est prévu de faire, l'attaque aura lieu, car c'est le but recherché par le hacker, exécuter un script à l'insu d'un bon utilisateur.
    Si, par principe de précaution on détruit la session, la suite du script ne devrait plus causer de problème (si on laisse courir le script, toujours).


    En somme, la suite des opérations seraient quelque part tout aussi important que la détection de l'attaque elle même (de l'anomalie sur le jeton).


    Comme ceci n'avait pas été évoqué, je lance un peu la réflexion.

  8. #8
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Ah bah oui détecter une erreur et ne pas la gérer ce serait absurde. ^^
    Il faut stopper le script et afficher un message ou bien rediriger vers une page d'erreur.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par transgohan Voir le message

    Et n'oublie pas le session_start() sur le second fichier.
    Merci Transgohan,
    Je ne savais pas qu'il faut toujours ajouter session_start()...

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Normalement le jeton ne devrait il pas être placé dans le formulaire (champ caché) pour ensuite être récupéré dans le 2ème fichier en GET ou POST afin de faire la comparaison entre sa valeur et celle dans la session ?

    Ceci n'a pas l'air d'être mentionné.
    Ici je ne comprends pas bien : même si cela est caché il est existe dans le code alors en regardant "code source de la page" / "afficher la source" on peut savoir le jeton, ne c'est pas ?

  11. #11
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par aspkiddy
    Ici je ne comprends pas bien : même si cela est caché il est existe dans le code alors en regardant "code source de la page" / "afficher la source" on peut savoir le jeton, ne c'est pas ?
    Si tu ne mets pas le jeton dans un formulaire, tu le mets où alors ?

    Le but est de faire une comparaison entre le jeton stocké dans la session et celui retourné par l'utilisateur pour vérifier sa présence, sa concordance et sa date de validité.

    Le jeton se veut unique et théoriquement non réutilisable (date + md5 dessus selon ton exemple).

    On peut toujours mettre le jeton dans un cookie.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Si tu ne mets pas le jeton dans un formulaire, tu le mets où alors ?
    Dans le 1er fichier, je veux mettre mon jeton et le chronomètre dans la session.

    Citation Envoyé par QUOTE=aspkiddy Voir le message

    2- La génération du jeton ($token_jeton = md5(time()*rand(1,10))) et stockage de ce jeton dans la session

    3- Le stockage le timestamp correspondant au moment de la création du jeton
    Je pense que mon raisonnement ne marcherait pas... Alors, il faut ajouter le jeton dans le formulaire (champ caché) ensuite pour la comparer...

    Je vais voir en faisant un essai....

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    je pourrais aussi mettre le jeton dans action de mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post"
    <?php
    	echo 'action="engregistrement.php?jtn_token='.$token_jeton.'"';
    ?>
    >
    Je vais voir quand même avec le champ caché

  14. #14
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je vais voir quand même avec le champ caché
    Mettre dans un champ caché ou dans l'URL, techniquement parlant c'est pareil, l'un n'est pas plus contraignant que l'autre (du moins je ne vois pas où).
    Du coup, il serait mieux dans un champ caché, histoire de le planquer un peu plus (même si cela n'est pas la panacée).


    Alors, il faut ajouter le jeton dans le formulaire (champ caché) ensuite pour la comparer
    Normalement cela fait partie de l'ensemble de la mise en place de cette sécurité là.
    Fait des recherches sur ce type d'attaque, tu trouveras quelques scénarios, du comment ces pirates procèdent pour contourner un système d'identification.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci RunCodePhp, pour tes conseils,

    J'ai fait mon jeton suite à tes conseils... Ça marche...

    Alors que je fais maintenant?
    • Poster mon code pour les autres ?
    • Poster mon code pour que tu vois si cela est bien fait ?
    • Fermer ce ticket en mettant icône "Résolu" ?

    Bonne après-midi

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    dans mon fichier où il y a les champs à remplir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    // initialisation de session
    session_start();
     
    // génération du jeton
    $token_jeton = md5(time()*rand(1,10));
    $token_jetonOptionB = md5(uniqid(mt_rand(), true));  // OPTION B Génère un identifiant unique basé sur la date et heure courante en microsecondes. 
    													// Sans prefix (préfixe vide), la chaîne retournée fera 13 caractères. Si more_entropy est à TRUE , elle fera 23 caractères.
    													//je ne sais pas si j'utilise l'option B 
     
     // stockage du jeton dans la session
    $_SESSION['jtn_token'] = $token_jeton;
     
    //stockage le timestamp correspondant au moment de la création du jeton
    $_SESSION['jtn_token_time'] = time();
     
     
    //test affichage 
    /*
    						echo ''.$token_jeton.'';
    						echo '</br> </br> ';
    						echo ''.$token_jetonOptionB.'';
    						echo '</br> --- fin test jeton---</br> ';
    						//exit ();
    */
    header('Content-Type: text/html; charset=UTF-8');
     ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
    </head>
     
    <body>
    <?php
    	$token_jeton = $_SESSION['jtn_token']; // récupération du jeton
    ?>
     
    <form method="post"
    <?php
    	//echo 'action="engregistrement.php?jtn_token='.$token_jeton.'"';
    ?>
    action="engregistrement.php">
     
    <input name="prenom" type="text" id="prenom" />
     
    <input type="hidden" name="input_token" id="input_token" value="<?php
    //Le champ caché a pour valeur le jeton
    echo $token_jeton;
    	?>"/>
     
     
     
    <?php
    //echo '<br />'.$token_jeton.'';
    //exit ();
    ?>
     
    </form>
    </body>
    </html>
    j'utilise la 1ere option (voir la ligne 7) comme jeton dans mon exemple...
    on peut aussi utiliser 2e option (ligne 8) mais je ne sais pas laquelle est meilleur...

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    dans 2e fichier où je fais le traitement/enregistrement des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <?php
     
    // initialisation de session
    session_start();
     
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    //:::::::::::  formule securise:::::::::::::::::::::::::::
    //:::::::::::  avec filtre input                 :::::::::::::::
    //:::::::::::: avec strip_slashes                :::::::::::::::
    //:::::::::::: avec strip_tags                   :::::::::::::::
    //:::::::::::: avec mysql_real_escape_string    ::::::::::::::::
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
     
    header('Content-Type: text/html; charset=UTF-8');
     
     
    //test affichage 
    /*				echo '1er token :'.$token_jeton.'';  // variable perdu (valeur est vide)
    				echo '<br />-get---'.$_GET['jtn_token'].''; // valeur jtn_token est correct
    				echo '<br />-session : ---'.$_SESSION['jtn_token'].'';  // argument faux : donc  (valeur est vide)
    				echo '<br />----';
    				
    				exit ();
    
    */
     
    // verification du jeton : y a t-il LE jeton dans cette session et dans ce formulaire
    if(isset($_SESSION['jtn_token']) && isset($_SESSION['jtn_token_time']) && isset($_POST['input_token']))
    {
    	//Si le même jeton entre la session et le formulaire
    	if($_SESSION['jtn_token'] == $_POST['input_token'])
    	{
    		//stockage du timestamp il y a 5 minutes
    		$ancien_timestamp = time() - (5*60);
    		//Si le jeton n'est pas expiré
    		if($_SESSION['jtn_token_time'] >= $ancien_timestamp)
    		{
    			//engregistrement de formulaire
    					//connection au serveur
    			include"/config/db/connection.php";
    				//sélection de la base de données et table
    			include"/config/db/selection.php";
     
    			// Utiliser filter_input à la place
    			//$prenom=$_POST["prenom"];
    			$prenom = filter_input(INPUT_POST, 'prenom', FILTER_SANITIZE_STRING); //// voir les filtre http://www.php.net/manual/fr/filter.filters.php [Filtres de nettoyage]
     
     
     
    			// pour empecher d'envoyer prenom vide en tapant sur le lien http://localhost/applications_web/test/securite/engregistrement.php
    			if (!empty($prenom))
     
    				{	
     
    				// strip_slashes + strip_tags + mysql_real_escape_string c'est mieux
    				//$prenom= htmlspecialchars($prenom, ENT_QUOTES);//  Pour traiter les accents et suprimer les code html :
    				$prenom= stripslashes($prenom); //Supprime les antislashs d'une chaîne et aussi les balises (exemple <strong>)
    				$prenom = strip_tags($prenom); // Supprime les balises (code)
     
    				$prenom = mysql_real_escape_string($prenom); //évite les injections SQL en protègeant les caractères spéciaux d'une commande SQL et doit s'utiliser avant une requête
     
    				$query = "INSERT INTO $table_db (bd_prenom)";
    				//$query = "INSERT INTO $table_db (colone_prenom)";
    				$query .= "VALUES ('$prenom')";
     
    				$result = mysql_query($query, $cnx) or die (mysql_error());
    				echo "engregistrement fait va voir ton bd";
    				}
     
     
    			else
    				{
    				 echo "Vous n'avez pas d'autorisation puisque le prènom est vide";
     
    				}
    		}
    		else
    		{
    			echo "timeout"; // message erreur parce que le temps n'est plus... le jeton n'est pas expiré
    		}
     
    	}
    }
     
    //// pas de jeton : hummmmm :-(
    else
    {
    	echo "Vous n'avez pas d'autorisation!!! Hummmm";
    }
     
    //la fermeture de session :
    session_destroy();
    //effacer aussi $_SESSION[] par unset
    unset ($_SESSION);
     
    ?>
    Que vous dites ? est ce que j'ai oublié quelques choses sur l'histoire du jeton ?

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Que vous dites ? est ce que j'ai oublié quelques choses sur l'histoire du jeton ?
    Pourquoi dis tu cela ? Cela ne fonctionne pas ?
    Si cela ne fonctionne pas, explique ce qu'il se passe (session détruite, etc ... et faire un minimum de débug).


    Au passage, faire un : $_SESSION = array() est assez radical comme procédé normalement.
    Puis il vaut mieux utiliser session_destroy() plutôt que unset().
    La doc : http://fr2.php.net/manual/fr/function.session-unset.php
    Citation Envoyé par Doc Php
    Attention

    Ne détruisez pas $_SESSION avec unset($_SESSION) car cela désactivera la possibilité d'enregistrer des variables de session à partir du tableau superglobal $_SESSION.

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Bonjour RunCodePhp,
    Non non, ça marche très bien...
    J'ai voulu savoir si j'avais oublié de quelques choses dans mon code...

    Merci pour tes conseils et je ferme cette discussion

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/08/2009, 17h44
  2. Réponses: 6
    Dernier message: 23/04/2009, 16h07
  3. Réponses: 3
    Dernier message: 23/04/2009, 12h44
  4. Réponses: 4
    Dernier message: 28/12/2008, 01h07
  5. Réponses: 2
    Dernier message: 09/11/2006, 22h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo