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 :

[Sécurité] Perte de la session à partir de la seconde page


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Par défaut [Sécurité] Perte de la session à partir de la seconde page
    Bonjour,
    il y a quelque chose de terrible que je ne comprend pas. En effet dans mon site j'utilise les variables de session qui me permettent d'identifier les utilisateurs et il y a une qui me permet de controler que les utilisateurs passent obligatoirement par la page d'accueil.Mon site marchait bien jusqu'à ce matin ou j'ai constaté qu'il y avait ce problème. Le problème c'est que la variable de session disparaît à partir de la deuxième page. J'ai fait un test.Normalement lorsqu'un utilisateur se connecte il arrive dans son compte. Dans cette page j'arrive à afficher la variable. Mais à partir de là je ne peux plus naviguer car je suis redirigé vers une page d'erreur(en effet j'ai mis ainsi le cas ou la variable de session est vide ou n'existe pas). Toutefois dans les pages ou je n'arrive pas à m'y rendre j'utilise cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php session_start();?>
    J'ai tout essayé sans rien trouver ou l'erreur peut venir. Peut être vous pouvez m'aider car mon site n'a plus de visite. Je vous remercie d'avance.

  2. #2
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Salut!

    Ce n'est pas normal si ton site fonctionnait avant...
    Que s'est-il passé entre temps ? As-tu changé d'hébergement, as-tu fait un mise à jour du code ? ...

    Session_start doit débuter ton programme, pas chaque script... Par exemple si tu fais un include ou require pour intégrer un script, celui-ci ne doit pas contenir un nouveau un session_start. (en fait j'imagine que tu le savais déjà, c'était juste au cas où).

    Utilises-tu la fonction session_destroy quelque part ?
    Ton navigateur accepte-t-il les cookies ?

  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    bonjour,

    si tu réecrit session start, cela vide les variables, si tes variable sessions sont crées dans une page qui s'appelle par exemple login.php et que tu veux les récupérer dans une page qui s'apelle blabla.php et bien tu dois ecrire <?php include ('login.php');?> en haut de ta page blabla.php

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 23
    Par défaut
    Citation Envoyé par gerald57 Voir le message
    bonjour,

    si tu réecrit session start, cela vide les variables, si tes variable sessions sont crées dans une page qui s'appelle par exemple login.php et que tu veux les récupérer dans une page qui s'apelle blabla.php et bien tu dois ecrire <?php include ('login.php');?> en haut de ta page blabla.php
    Première nouvelle

    session_start n'a jamais rien vidé, il est complètement inutile de rappeler login.php.

    un simple session_start en début de page, et basta

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Par défaut
    bonjour, merci de vos réponses. En fait voilà comment j'ai écris mes scripts:
    lors de la connexion il y a un filtre qui permet d'attribuer les valeurs aux variables de session.
    (filtre.php)
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php session_start();?>
    <?php 
    	//--test si c'est un membre alors
    	......
    	......
    	$_SESSION['login_bib']		= "OK";
     
    ?>
    Toutefois j'ai un autre programme qui permet de vérifier si la variable est présente et correcte
    (verif_login.php)
    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
    <?php session_start(); ?>
    <?php
     
     
    /* 
    si la variable de session login_bib n'existe pas cela siginifie que le visiteur 
    n'a pas de session ouverte, il n'est donc pas logué ni autorisé à
    acceder à l'espace membres
    */
    if(!isset($_SESSION['login_bib'])) {
     
    	$_SESSION['Txt_Error']="1";
    	header("Location:../Erreur/error.php");
      exit();
    }
    ?>
    c'est ce programme qui est inclus dans les fichiers.

    Lorsqu'un utilisateur se connecte correctement, il arrive dans son compte(moncompte.php).
    Voilà l'exemple de cette page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php include("../Filtre/verif_login.php"); ?>
    <?php include("../INC/datejour.php"); ?>
    <?php
     
    //Pour un membre ayant ouvert une session et qui est connecté
    if($_SESSION['login_bib']=="OK"){
     
    	//ici on affiche les informations concernant ce membre
    }else{
    	//--un formulaire de connexion
    	include("../Bibplus/connexion.php");
     
    }
    Dans cette page lorsque j'affiche la variable $_SESSION['login_bib'], j'ai bien OK.

    Toutefois à partir de cette même je n'arrive pas à aller dans d'autres pages(exemple la page mesdonnees.php)
    Voilà comment est la page mesdonnees.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php include("../Filtre/verif_login.php"); ?>
    <?php 
     
    	if($_SESSION['login_bib']=="OK"){
    		//--si la variable à la valeur OK, on affiche ses données
     
    	}else{
    		//--si non on affiche le formulaire de connexion
    		include("../Bibplus/connexion.php");
    	}
    ?>
    Et à partir de la page moncompte.php,comme je l'ai dis, lorsque je clique sur le lien mesdonnees.php, je tombe toujours
    sur le formulaire de connexion. Cela veut dire que la variable a disparu, ou a changé. J'ai essayé d'afficher cette variable dans
    mesdonnees.php ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php include("../Filtre/verif_login.php"); ?>
    <?php
    	echo $_SESSION['login_bib'];
    	exit();
    ?>
    Dans ce cas j'ai la valeur de la variable qui est KO, or cette valeur est donnée au début de la page(index.php) avant d'aller vers le filtre
    permetez moi de vous donner le cheminement et la valeur des variables :


    index.php(variable="KO")==>filtre.php(si c'est un membre, on change la valeur de la variable,variable="OK")==>moncompte.php(variable="OK")
    ==>mesdonnees.php(c'est là ou il y a le problème. variable="KO").

    La seule chose que j'ai effectué c'est dans mes pages d'administrations qui ne touchent que la base de données et non mes scripts.

    Je vous remercie d'avance de votre aide.

  6. #6
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour

    Dans verif_login.php essaye d'utiliser empty à la place de isset :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!empty($_SESSION['login_bib'])) {
     
    	$_SESSION['Txt_Error']="1";
    	header("Location:../Erreur/error.php");
      exit();
    }
    De plus dans tes exemples, pour plus de lisibilité je te conseille ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php include("../Filtre/verif_login.php");
    include("../INC/datejour.php");
     
    //Pour un membre ayant ouvert une session et qui est connecté
    if($_SESSION['login_bib']=="OK"){
    //...
    Ce n'est pas la peine de mettre chaque ligne de code entre des <?php et ?>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Par défaut
    Merci,
    j'ai essayé de changer isset par empty, mais rien à faire j'ai toujours KO au lieu de OK.
    Vraiment je suis dépassé. Mon hébergeur m'a dit que l'eereur ne provient pas de ses serveurs.

  8. #8
    Membre averti
    Homme Profil pro
    Expert Banque en ligne
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert Banque en ligne
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Par défaut même problème insoluble pour moi...
    Bonjour,

    Je souhaite donc obtenir une navigation différenciée selon les "abonnés identifiés" et les visiteurs non inscrits. J'ai donc créé un formulaire d'inscription avec MySQL qui fonctionne très bien.
    Mais là où ça cloche, c'est au moment de l'identification. Je n'arrivais jamais à récupérer mes variables de session... et ce malgré des sessions qui existent bel et bien puisque les fichiers apparaissent au fur et à mesure sous Dreamweaver dans le dossier "tmp" créé à cette intention dans l'arborescence du site... Mystère.

    Pour les besoins de mes tests, j'ai donc rapidement écris les quelques lignes suivantes pour la page test.php (code exhaustif) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    session_start();
    $_SESSION['nom'] = 'bricoleur';
    $_SESSION['prenom'] = 'schtroumpf';
    echo ('<form method="post" action="/test2.php">
        <input type="submit" value="Valider" />');
    ?>
    et ci-après, pour la page test2.php (là aussi tout y est) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    if(isset($_SESSION['prenom'])) $prenom = $_SESSION['prenom'];
        else $prenom = 'ca ne';
    if(isset($_SESSION['nom'])) $nom = $_SESSION['nom'];
        else $nom = 'passe pas';
    echo ('Bonjour, '.$prenom.' '.$nom.' !<br>
        <a href="/test.php"><input type="submit" value="Réessayer"></a>');
    ?>
    et ben... ça ne marche toujours pas => ni IE7, ni, Opéra, ni Netscape, ni mon bon vieux FF2. et même .
    Je suis donc aller voir un peu partout (vérification des autorisations de cookies dans mes navigateurs, vérification de l'absence d' HTML avant l'ouverture de session, lecture des fichiers de session pour savoir ce qu'ils contiennent, c'est-à-dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom|s:9:"bricoleur";prenom|s:10:"schtroumpf";
    comme on aurait pu s'y attendre...)
    J'ai même essayé de voir si le fichier PHP.ini était correctement configuré, fichier dont voici un bout car il peut vous être utile pour m'aider :
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    [Session]
    ; Handler used to store/retrieve data.
    session.save_handler = files
     
    ; Argument passed to save_handler.  In the case of files, this is the path
    ; where data files are stored. Note: Windows users have to change this
    ; variable in order to use PHP's session functions.
    ;
    ; As of PHP 4.0.1, you can define the path as:
    ;
    ;     session.save_path = "N;/path"
    ;
    ; where N is an integer.  Instead of storing all the session files in
    ; /path, what this will do is use subdirectories N-levels deep, and
    ; store the session data in those directories.  This is useful if you
    ; or your OS have problems with lots of files in one directory, and is
    ; a more efficient layout for servers that handle lots of sessions.
    ;
    ; NOTE 1: PHP will not create this directory structure automatically.
    ;         You can use the script in the ext/session dir for that purpose.
    ; NOTE 2: See the section on garbage collection below if you choose to
    ;         use subdirectories for session storage
    ;
    ; The file storage module creates files using mode 600 by default.
    ; You can change that by using
    ;
    ;     session.save_path = "N;MODE;/path"
    ;
    ; where MODE is the octal representation of the mode. Note that this
    ; does not overwrite the process's umask.
    session.save_path = C:\\Program Files\\EasyPHP 2.0b1\\www\\tmp
     
    ; Whether to use cookies.
    session.use_cookies = 1
     
    ;session.cookie_secure =
     
    ; This option enables administrators to make their users invulnerable to
    ; attacks which involve passing session ids in URLs; defaults to 0.
    ; session.use_only_cookies = 1
     
    ; Name of the session (used as cookie name).
    session.name = PHPSESSID
     
    ; Initialize session on request startup.
    session.auto_start = 0
     
    ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
    session.cookie_lifetime = 0
     
    ; The path for which the cookie is valid.
    session.cookie_path = C:\\Program Files\\EasyPHP 2.0b1\\www\\tmp
     
    ; The domain for which the cookie is valid.
    session.cookie_domain =
     
    ; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
    session.cookie_httponly = 
     
    ; Handler used to serialize data.  php is the standard serializer of PHP.
    session.serialize_handler = php
     
    ; Define the probability that the 'garbage collection' process is started
    ; on every session initialization.
    ; The probability is calculated by using gc_probability/gc_divisor,
    ; e.g. 1/100 means there is a 1% chance that the GC process starts
    ; on each request.
     
    session.gc_probability = 1
    session.gc_divisor     = 1000
     
    ; After this number of seconds, stored data will be seen as 'garbage' and
    ; cleaned up by the garbage collection process.
    session.gc_maxlifetime = 1440
     
    ; NOTE: If you are using the subdirectory option for storing session files
    ;       (see session.save_path above), then garbage collection does *not*
    ;       happen automatically.  You will need to do your own garbage
    ;       collection through a shell script, cron entry, or some other method.
    ;       For example, the following script would is the equivalent of
    ;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
    ;          cd /path/to/sessions; find -cmin +24 | xargs rm
     
    ; PHP 4.2 and less have an undocumented feature/bug that allows you to
    ; to initialize a session variable in the global scope, albeit register_globals
    ; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
    ; You can disable the feature and the warning separately. At this time,
    ; the warning is only displayed, if bug_compat_42 is enabled.
     
    session.bug_compat_42 = 0
    session.bug_compat_warn = 1
     
    ; Check HTTP Referer to invalidate externally stored URLs containing ids.
    ; HTTP_REFERER has to contain this substring for the session to be
    ; considered as valid.
    session.referer_check =
     
    ; How many bytes to read from the file.
    session.entropy_length = 0
     
    ; Specified here to create the session id.
    session.entropy_file =
     
    ;session.entropy_length = 16
     
    ;session.entropy_file = /dev/urandom
     
    ; Set to {nocache,private,public,} to determine HTTP caching aspects
    ; or leave this empty to avoid sending anti-caching headers.
    session.cache_limiter = nocache
     
    ; Document expires after n minutes.
    session.cache_expire = 180
     
    ; trans sid support is disabled by default.
    ; Use of trans sid may risk your users security.
    ; Use this option with caution.
    ; - User may send URL contains active session ID
    ;   to other person via. email/irc/etc.
    ; - URL that contains active session ID may be stored
    ;   in publically accessible computer.
    ; - User may access your site with the same session ID
    ;   always using URL stored in browser's history or bookmarks.
    session.use_trans_sid = 0
     
    ; Select a hash function
    ; 0: MD5   (128 bits)
    ; 1: SHA-1 (160 bits)
    session.hash_function = 0
     
    ; Define how many bits are stored in each character when converting
    ; the binary hash data to something readable.
    ;
    ; 4 bits: 0-9, a-f
    ; 5 bits: 0-9, a-v
    ; 6 bits: 0-9, a-z, A-Z, "-", ","
    session.hash_bits_per_character = 5
     
    ; The URL rewriter will look for URLs in a defined set of HTML tags.
    ; form/fieldset are special; if you include them here, the rewriter will
    ; add a hidden <input> field with the info which is otherwise appended
    ; to URLs.  If you want XHTML conformity, remove the form entry.
    ; Note that all valid entries require a "=", even if no value follows.
    url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
     
    [MSSQL]
    Là je sèche
    J'ai posté l'été dernier (ben oui je m'amuse avec mes lignes de codes quand je peux... ) mais sans réponse.
    Peut-être une âme charitable acceptera-t-elle d'éclairer ma lanterne ?
    Merci à vous.
    Franz

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 204
    Par défaut
    Bonjour et merci de votre aide,
    en effet j'ai bien essayé la manipulation sur la configuration de IE :
    Outils => Options internet => Onglet confidentialité.
    J'ai mis cela au plus bas c'est à dire il accepte tous les cookies, et même là j'ai toujours le même problème.
    Là je suis dépassé et ça me fait consulter mon site avec mozilla pourtant ce n'est pas ce que je veux.

    Merci encore 12Monkeys.

  10. #10
    Membre Expert
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.save_path = C:\\Program Files\\EasyPHP 2.0b1\\www\\tmp
    La syntaxe de ce chemin me paraît invalide. Selon moi, Apache n'acceptera pas les noms Windows... Il ne faut ni espace, ni point, ai-je raison ?

    Pour tester si le problème vient de là, tu peux tout simplement créer un dossier tmp à la racine du disque C et spécifier c:\tmp dans le fichier de config d'Apache...

    Sinon, essaye de mettre session.bug_compat_42 à 1 et n'oubli pas de redémarrer le serveur pour que tes modifs soient prises en compte.

Discussions similaires

  1. Perte de la session au rafraichissement de la page
    Par potpot06 dans le forum Langage
    Réponses: 4
    Dernier message: 08/01/2009, 16h10
  2. Probleme avec session à partir de la 2eme page
    Par arti2004 dans le forum Langage
    Réponses: 4
    Dernier message: 26/05/2006, 03h59
  3. [Sécurité] Question sur les sessions
    Par Seth77 dans le forum Langage
    Réponses: 20
    Dernier message: 25/01/2006, 12h34
  4. [Sécurité] destruction automatique de session
    Par samsso2005 dans le forum Langage
    Réponses: 8
    Dernier message: 16/01/2006, 14h29
  5. [Sécurité] securite avec les sessions.
    Par krapoulos dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2005, 14h41

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