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 :

[Cookies] Problème de récupération de la session sur un autre script


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut [Cookies] Problème de récupération de la session sur un autre script
    Salut
    j'ai fais une vaingtaine de page, et la session marchait trés bien, mais là ca ne marche plus !
    je ne comprend pas pourquoi ! hier ca marchait
    dans l'index (page ou j'ai la template et que j'utilise comme cadre avec include pour les autres pages ) :
    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
    @session_start();
    include("base/connect.php");
    if(isset($_POST['disconnect_me']))                 //on vient de l'index pour se                                       deconnecter
    {
    $_SESSION=array();
    session_destroy();
    }
     
    if(isset($_POST['login']))  // on vien de l'index pour se connecter
    {
      $tr=0;
      $l=$_POST['login'];
      $p=$_POST['password'];
      $r=mysql_query("select * from user where login='$l'");
      $re=mysql_fetch_row($r);
      if(strcmp($re[4],$p)==0)          // avec succés
        {
    	if($re[13]==1)
    	{
    	 $tr=1;
         @session_start();
         $l=session_id();
         session_register('identification');
         $_SESSION['identification']=1;
         session_register('user');
         $_SESSION['user']=$re[3];
         $_SESSION['type']=$re[5];
         $_SESSION['nom']=$re[1];
    	 $_SESSION['id_u']=$re[0];
    	 }
    	 else
    	 {
    	 $tr=5;
    	 }
     
        } 
    }
    puis on a le formulaire de connexion et de deconnexion
    la connexion s'etablie trés bien au debut mais dés le passage d'une page a l'autre, la session ne marche plus

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    Tu ouvres bien ta session sur chaque page ? Tu n'as pas d'erreur ?

    Au lieu d'utiliser des fonctions dépréciées (session_register) utilise les super globales $_SESSION (surtout que c'est ce que tu fais juste après).

    Il y a un truc que je ne comprends pas quand tu fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    session_register('identification');
    $_SESSION['identification']=1;
    session_register('user');
    $_SESSION['user']=$re[3];
    Tes session_register ne servent à rien puisque juste après tu affectes la même variables avec $_SESSION ??

    Dernière chose : tu redémarres ta session dans le if alors que tu la démarres déjà au début de ton code.

    Essaie ceci :
    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
    <?php
    session_start();
    require_once 'base/connect.php';
    if(isset($_POST['disconnect_me'])) //on vient de l'index pour se deconnecter
    {
      $_SESSION=array();
      session_destroy();
    }
     
    if(isset($_POST['login']))  // on vien de l'index pour se connecter
    {
      $tr=0;
      $l=$_POST['login'];
      $p=$_POST['password'];
      $r=mysql_query("select * from user where login='$l'");
      $re=mysql_fetch_row($r);
      if(strcmp($re[4],$p)==0) // avec succés
      {
        if($re[13]==1)
        {
          $tr=1;
          $l=session_id();
          $_SESSION['identification']=1;
          $_SESSION['user']=$re[3];
          $_SESSION['type']=$re[5];
          $_SESSION['nom']=$re[1];
          $_SESSION['id_u']=$re[0];
         }
         else $tr=5;
      } 
    }
    ?>

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    Le probleme n'est pas dans l'identification
    elle se passe tres bien, mais pkutot quand je passe de page en page :
    j'ai fais l'identification dans l'index....
    puis j'ai un include"autrepage.php";
    dans l'autre page, je met le @session_start();
    puis quand je teste avec print_r($_SESSION) ca me donne Array()
    apres quand j'utilise $_SESSION['user'], comme erreur il me donne
    Undefined index: user in c:\program files\easyphp1-8\www\hahi\autrepage.php on line 5
    !!!!!
    merci

  4. #4
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Tu devrais peut-être vérifier qu'à la fin du code que tu nous as donné, $_SESSION existe vraiment et conteint quelque chose (en utilisant un print_r ou un var_dump).

    Personne n'aurait modifier php.ini entre temps ?

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    J'ai verifié avec print_r($_SESSION) et ca marche dans l'index
    mais même quand j'ai fais un lien de index vers index juste pour essayer, la session disparait !

    hier tout allais bien !
    pour ce qui est du php.ini, moi j'y ai pas touché , mais qu'est ce que je dois verifier dedans ?
    merci

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ce n'est pas en faisant précéder session_start de @ que vous trouverez l'erreur : si la création/récupération des sessions est basée sur les cookies et que vous envoyez quoi que ce soit au client avant, le cookie ne sera pas créé et il ne vous sera donc pas possible de récupérer cette même session sur une autre page. De plus, session_register est mal utilisé et déprécié. Choses que trotters213 vous avez corrigé.

    Ce qu'il serait intéressant de savoir c'est si votre identifiant de session reste le même à chaque script (echo session_id() par exemple).

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    j'ai essayé avec le echo(session_id())
    et j'en ai mi un a l'index et un dans les autres scripts
    il est le même dans l'index que dans l'autre script, mais il change a chaque fois que je raffraichi
    et pour ce qui est du php.ini , c'est impossible car j'aai essayé sur un autre pc et c'est le même probleme
    merci

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Avez-vous des messages d'erreur après :
    • vous êtes débarrassé des @ (même temporairement au moyen de commentaires)
    • avoir utilisé la valeur E_ALL pour error_reporting (fonction ou directive éponymes)

    ?

    Envoyez-vous quoi que ce soit au navigateur avant l'appel à session_start ? Quelle est la configuration au niveau des sessions (session.use_trans_sid, session.use_only_cookies et session.use_cookies) ?

    PS : avant de chercher à utiliser vos variables de session, un test avec isset serait certainement approprié.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    j'ai enlevé les @ et ca me donne ces erreurs :

    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\hahi\index.php:1) in c:\program files\easyphp1-8\www\hahi\index.php on line 17

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\hahi\index.php:1) in c:\program files\easyphp1-8\www\hahi\index.php on line 17
    Pour le session_start() c'est la premiere ligne de code
    seulelment j'utilise des include dans l'index !! il y a des session_start() dans les scripts que j'ouvre dans l'index !!
    pour session.use_trans_sid, session.use_only_cookies et session.use_cookies...
    j'ai rien fait de cela c'est grave ?

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par visqueu Voir le message
    Pour le session_start() c'est la premiere ligne de code
    seulelment j'utilise des include dans l'index !! il y a des session_start() dans les scripts que j'ouvre dans l'index !!
    Pour que ce soit plus clair : pourriez-vous illustrer ou nous donner un exemple ?

    Qu'est-ce qui figure comme première ligne de index.php ?

    Citation Envoyé par visqueu Voir le message
    pour session.use_trans_sid, session.use_only_cookies et session.use_cookies...
    j'ai rien fait de cela c'est grave ?
    Je vous demandais les valeurs de ces directives que vous pouvez par exemple trouver dans la sortie de phpinfo. Ce n'est plus nécessaire maintenant puisque nous avons les messages d'erreurs (et une idée de votre configuration)

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    pour les include, j'ai un genre de :
    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
    <?php
    session_start();
    ?>
    <SCRIPT language="javascript">
    function verif()
    {
    }
    </SCRIPT>
    <?php
    include("base-de-donnes.php");
    //code de creation de session
    //ou code de deconnexion
    //formulaire de connexion ...
    //ou bouton de deconnexion
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    <title>En cour de construction</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta name="description" content="Place web site description here"/>
    <meta name="keywords" content="place, keywords, here"/>
    <link href="style.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
    <?php
    if(isset($_SESSION['type'])&&$_SESSION['type']=='webmaster')
    {
    include("page-admin.php");
    }
    ?>
    .....</body>

  12. #12
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Je pense qu'elle te demandais si tu faisais un include AVANT de faire le session_start (afin de voir si tu n'affichais rien avant).

    Tu as quoi dans ton page-admin.php (tu ne referais pas un session_start dedans) ?

    PS : ça n'a rien à voir mais tu as 2 DOCTYPE et ça c'est pas cool

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Ok j'ai compris. On peut se passer des session_start dans les fichiers inclus puisque le démarrage de la session étant ainsi redondant, PHP émettra un warning (rien de grave en soi).

    Par contre à quoi correspond les lignes 1 et 17 de index.php ? Faisons plus simple : gardez les @ retirées ou inopérantes, consultez votre script dans votre navigateur, affichez-en la source. Qu'est-ce qui apparaît avant ces messages d'erreur alors qu'il ne devrait rien y avoir ?

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    j'ai enlevé les @ pour les pages incluses , il y en a celles qui ont marché quand j'ai enlevé leurs session_start() et il y en a qui marchent bien comme ca !
    il y avait aussi une page ou j'avais du code javascript avant la session_start() portant javascript s'execute coté client !!! quand j'ai mis la sesson_start avant le code tout est remis dans l'ordre
    Pour le moment tout va bien mais j'aimerai aussi savoir a quoi servent les fonctions session.use_trans_sid, session.use_only_cookies et session.use_cookies est ce que je dois les fixer ?
    (les doctype j'ai aussi un editeur de texte WYSIWYG qui m'oblige a lui mettre ca dtd)
    merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

  15. #15
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut
    Citation Envoyé par visqueu Voir le message
    il y avait aussi une page ou j'avais du code javascript avant la session_start() portant javascript s'execute coté client !!! quand j'ai mis la sesson_start avant le code tout est remis dans l'ordre
    Le problème n'est pas que ce soit éxecuter côté client, c'est que tu écris dans la page HTML avant d'ouvrir la session : tu pourrais faire un echo ' '; juste avant ton session_start et ça suffirait pour le faire foirer.
    Citation Envoyé par visqueu Voir le message
    Pour le moment tout va bien mais j'aimerai aussi savoir a quoi servent les fonctions session.use_trans_sid, session.use_only_cookies et session.use_cookies est ce que je dois les fixer ?
    ce ne sont pas des fonctions, ce sont des directives PHP. Pour de plus amples explications :

    Citation Envoyé par visqueu Voir le message
    (les doctype j'ai aussi un editeur de texte WYSIWYG qui m'oblige a lui mettre ca dtd)
    C'est quoi ton éditeur ? Tu ne peux pas le configurer pour qu'il te mette le bon doctype directement ?

  16. #16
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    j'ai vu la faq, j'ai vu mon php.ini
    j'ai compris que je devrai laisser
    session.use_cookies =1
    et changer
    session.use_only_cookies=0
    mais j'ai trouvé que j'ai
    session.use_trans_sid = 0
    je doi la mettre en 1 ?
    c'est ca ?

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Pourquoi vouloir changer votre configuration si tout fonctionne ?

    Il y a deux configurations possibles pour faire transiter l'identifiant afin de retrouver sa session :
    • les cookies (session.use_cookies)
    • la réécriture des liens internes (qui est tout aussi valable pour les formulaires) (session.use_trans_sid et session.use_only_cookies)


    En résumé :
    Pourquoi se limiter aux cookies ? Pour des raisons de sécurité - je ne vais pas m'étendre sur le sujet ceci étant déjà traité de manière plus large dans l'ensemble de nos articles abordant la sécurité - et esthétique (l'identifiant n'est pas visible). Pourquoi activer session.use_trans_sid et désactiver session.use_only_cookies ? Ce n'est intéressant que si vous souhaitez réellement privilégier l'accessibilité au détriment du reste : certaines personnes désactivent les cookies volontairement (bien que généralement on puisse le gérer par whitelist), certains "clients" ne permettent pas de les utiliser (disons ne sont pas prévus pour).

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2007
    Messages : 70
    Points : 51
    Points
    51
    Par défaut !=
    Ca va j'ai bien compris
    Merci trotters
    Merci julp
    a present mon projet est preque fini et c'est grace a vous

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/01/2012, 17h32
  2. Réponses: 7
    Dernier message: 08/07/2011, 16h56
  3. Le problème de la durée des sessions sur le forum developpez.com
    Par Thomas_ats dans le forum Evolutions du club
    Réponses: 14
    Dernier message: 12/01/2009, 18h44
  4. [Cookies] Ouvrir une session sur un autre site
    Par eraim dans le forum Langage
    Réponses: 1
    Dernier message: 05/09/2006, 15h33
  5. Réponses: 2
    Dernier message: 25/04/2006, 17h08

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