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

Web Perl Discussion :

Probleme session et coockie


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut Probleme session et coockie
    Bonjour
    Je rame avec un script ou je ne vois pas ou est le problème...

    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
    #!/usr/bin/perl		
     
    use CGI;
    use CGI qw(:standard);
    use CGI::Session;	
     
    $html = new CGI;  	  
     
    # Si on a le paramètre login et mdp passé en paramètre, alors...
    if (defined(param('login')) && defined(param('mdp'))){
      # on crée une session		
      $session = new CGI::Session() or die CGI::Session->errstr;	 
     
      # on y stock les données login et mdp
      $session->param('login', param('login'));
      $session->param('mdp', param('mdp'));	    
      $session->save_param();  		 
     
      #on crée le cookie de session
      print $session->header();
    }	 
    # si l'utilisateur à demandé de se déconnecter 
    if (defined(param('action')) && (param('action')=='deco')){
      # on détruit sa session
      $session->delete();	
    }	
     
    print $html->start_html(); 
     
      # si on a un session existante ...
      if (defined(cookie("CGISESSID"))){
        # on récupère l'id de la session
    	$id = cookie("CGISESSID");
     
    	#on récupère la session
    	$session = CGI::Session->load($id);	
     
    	# on affiche le menu du compte
    	print "Bienvenue sur votre page de compte ",$session->param("login"),"<br />";	   
        print "<a href='session.cgi?action=deco'>Se déconnecter</a>";   
      }	else { 	
        # sinon on affiche le formulaire de saisie
    	print "<form action='session.cgi' method='post'>
    	         Login <input type='text' size=20 name='login'><br />
    			 mdp <input type='password' size=20 name='mdp'><br />
    			 <input type='submit' value='Connecter'>
    	       </form>";    
      }			 
     
    print $html->end_html();
    Est ce que quelqu'un peut m'aider...

    Merci
    Patrick

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    C'est le bordel dans ce script... Tu utilises CGI avec l'interface objet pour start_html() et end_html() et avec l'interface fonctionnelle pour param(). Tu utilises CGI pour générer le début et la fin de ton html, mais pas entre les deux, où tu écris ton html texto (soit dit en passant, si tu veux vraiment faire ça, je te conseille soit d'utiliser un système de template, c'est beaucoup plus propre, soit au moins d'utiliser un gros HEREDOC).
    Par ailleurs tu utilises la méthode param() de CGI::Session, mais également save_param(), c'est l'un ou l'autre, en tout cas ici les appels à $session->param() sont redondants.

    Corrige déjà un peu tout ça, tu devrais y voir plus clair.

    --
    Jedaï

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    J'ai corrigé ce que tu m'as dit mais j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Internal Server Error
    The server encountered an internal error or misconfiguration and was unable to complete your request.
     
    Please contact the server administrator, webmaster@refuge-tinderets.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.
     
    More information about this error may be available in the server error log.
     
    Apache/1.3.37 Server at www.refuge-tinderets.com Port 80
    Maintenant mon code est le suivant :

    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
    #!/usr/bin/perl		
     
    use CGI;
    use CGI qw(:standard);
    use CGI::Session;	 	  
     
    # Si on a le paramètre login et mdp passé en paramètre, alors...
    if (defined(param('login')) && defined(param('mdp'))){
      # on crée une session		
      $session = new CGI::Session() or die CGI::Session->errstr;	 
     
      # on y stock les données login et mdp
      $session->param('login', param('login'));
      $session->param('mdp', param('mdp'));	     		 
     
      #on crée le cookie de session
      print $session->header();
    }	 
    # si l'utilisateur à demandé de se déconnecter 
    if (defined(param('action')) && (param('action')=='deco')){
      # on détruit sa session
      $session->delete();	
    }	
     
    print "<html>
             <head>	
    		   <title>Session</title>
    		 </head>
             <body>"; 
     
      # si on a un session existante ...
      if (defined(cookie("CGISESSID"))){
        # on récupère l'id de la session
    	$id = cookie("CGISESSID");
     
    	#on récupère la session
    	$session = CGI::Session->load($id);	
     
    	# on affiche le menu du compte
    	print "Bienvenue sur votre page de compte ",$session->param("login"),"<br />";	   
        print "<a href='session.cgi?action=deco'>Se déconnecter</a>";   
      }	else { 	
        # sinon on affiche le formulaire de saisie
    	print "<form action='session.cgi' method='post'>
    	         Login <input type='text' size=20 name='login'><br />
    			 mdp <input type='password' size=20 name='mdp'><br />
    			 <input type='submit' value='Connecter'>
    	       </form>";    
      }			 
     
    print "  </body>
           </html>";
    Le CHMOD est bien mis à 755...

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Et que dit l'error.log ? (ou alors tu mets "use CGI::Carp qw(fatalsToBrowser);" au début de ton script)
    Par ailleurs, la session ne sera pas détruite, car elle n'est pas chargée avant d'être détruite... De plus tu charges deux fois CGI, une fois suffit.

    --
    Jedaï

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 21
    Par défaut
    Merci, pour ce qui est des 'use', ils sont tous utiles, lorsque j'en retire un, j'ai une erreur.

    Mon script fonctionne PRESQUE completement après une journée passée dessus ...

    Il subsiste encore un problème, la variable $session n'est pas détruite quand j'appel la méthode $session->delete();
    Quelqu'un pourrais me dire comment complètement détruire cette variable?

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Le premier CGI est inutile a priori. Comme je te l'ai dit ta variable $session n'a pas encore été rempli quand tu essaies de la supprimer, rien d'étonnant à ce que cela échoue.
    Je pense que ceci devrait un peu mieux marcher (en le combinant avec les éventuelles autres corrections que tu as ajouté de ton côté) :
    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
    #!/usr/bin/perl
    use strict;
    use CGI qw(:standard);
    use CGI::Session;
     
    my $session;
    my $already_header = 0;
     
    # Si on a le paramètre login et mdp passé en paramètre, alors...
    if ( defined param('login') && defined param('mdp') ) {
     
        # on crée une session
        $session = new CGI::Session() or die CGI::Session->errstr;
     
        $session->expire('2h');
     
        # on y stocke les données login et mdp
        $session->param( 'login', param('login') );
        $session->param( 'mdp',   param('mdp') );
     
        #on crée le cookie de session
        print $session->header();
        $already_header++;
    }
     
    # si on a un session existante ...
    if ( not defined $session and defined cookie("CGISESSID") ) {
     
        # on récupère l'id de la session
        my $id = cookie("CGISESSID");
     
        #on récupère la session
        $session = CGI::Session->load($id);
     
        undef $session if $session->is_empty();
     
    }
     
    if ( defined $session ) {
     
        # si l'utilisateur à demandé de se déconnecter
        if ( defined param('action')  && param('action') eq 'deco' ) {
     
            # on détruit sa session
            $session->delete();
     
            new_login();
        } else {
     
            print header() unless $already_header;
     
            print start_html('Session'),
     
              # on affiche le menu du compte
              p(
                "Bienvenue sur votre page de compte ",
                $session->param("login"),
                br(), a( { -href => 'session.cgi?action=deco' }, "Se déconnecter" ),
              ),
              end_html();
        }
     
    }
    else {
        new_login();
    }
     
    sub new_login {
        print header() unless $already_header;
     
        # sinon on affiche le formulaire de saisie
        print start_html('Session'),
          start_form( -method => 'post', -action => 'session.cgi' ),
          p( "Login", textfield( -name => 'login', -size => 20 ), ),
          p( "Mot de passe", password_field( -name => 'mdp', -size => 20 ), ),
          submit( -name => 'button', -value => 'Connecter' ), end_form(),
          end_html();
    }
    --
    Jedaï

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

Discussions similaires

  1. Probleme session coté client !
    Par vince.utc dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2007, 08h42
  2. [Cookies] Probleme session espace d'administration
    Par kodokan dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2006, 19h55
  3. [Cookies] Problemes sessions php
    Par Gmal dans le forum Langage
    Réponses: 5
    Dernier message: 01/08/2006, 13h13
  4. [Sécurité] Problème Session
    Par moscovisci dans le forum Langage
    Réponses: 5
    Dernier message: 12/04/2006, 16h35
  5. Probleme Session/requete SQL
    Par kolib dans le forum ASP
    Réponses: 4
    Dernier message: 14/06/2005, 16h23

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