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 :

[CGI][Sessions][serveur INTRASTORE]


Sujet :

Web Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut [CGI][Sessions][serveur INTRASTORE]
    Bien le bonjour a tous et a toutes,

    J'essaye donc de faire fonctionner des sessions sur un serveur intrastore, mais évidemment ca foire!

    Voici mon code de création du cookie : (les **** sont la pour masquer des champs confidentiels...)

    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
    #!/usr/local/bin/perl
     
    sub BEGIN {
        $ENV{DISPLAY} = "*****" ;
    }
     
    use CGI::Session;
    use CGI;
     
    # Initiation de la session
    $session = new CGI::Session("driver:File",undef,{'Directory'=>'/****/tmp'});
     
    # Inscription de la variable dans la session sur le serveur
    $session->param('status','logged');
    $session->expire('+5m');
     
    # Envoi du cookie reliant l'utilisateur à sa session serveur
    $id = $session->id();
    $host = $ENV{'HTTP_HOST'};
    print "Set-Cookie: session=$id; domain=.$host; path=/\n";
     
    exit(0);
    Tous simple... Et comme erreur, j'en recois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > perldebug ****.cgi
    Can't call method "param" on an undefined value at ****.cgi line 14.
    DESTROY created new reference to dead object 'CGI::Session' during global destruction
    J'ai cette erreur que ce soit en ligne de commande ou par le oueb...
    Je précise qu'il n'y a aucun probleme de droits d'acces, que j'ai repris le code de cpan.org et que j'ai essayé de mettre undef a la place de "driver:File"

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Essaie plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $session = new CGI::Session();
    Et veux-tu gérer ta session uniquement par cookies ? Ou bien côté serveur aussi ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    A vrai dire, je m'en fout... Le but seul et unique (et j'aurais surement du commencer par la) c'est de savoir si il y a eu une authentification ou pas...

    Je m'explique :

    Je joue avec des fichiers .acl, donc pour un utilisateur, j'ai certains droits. Je me sert de ces droits pour afficher (web) les possibilités de cet utilisateurs.
    Exemple :
    Anatole:lr
    Jules:lrw

    Anatole pourra browser les clients et en voir les informations sans pouvoir les modifier alors que Jules, oui!

    Le probleme, c'est qu'il ne faut pas oublier Mr anonyme... qui lui aussi a des droits...

    Lorsque j'appelle une page comme ceci : http://monsite.com/script.pl , alors il n'y a pas authentification si par contre j'appelle http://monsite.com/AUTH/script.pl , la il faut s'authentifier mais anonyme est possible si il est dans .acl !
    Donc j'ai besoin de savoir a n'importe quel moment si le client du poste X s'est authentifié ou pas pour placer AUTH dans les liens et afficher correctement la page... Et pour répondre avant qu'on me pose la question, je ne mets pas directement AUTH dans les liens sinon la fenetre d'authentification fait du pop-up a chaque fois et c'est ch*ant...

    Je sais c'est long et ch*ant a lire, mais il fallait que j'explique quand meme...

    Ps : ca plante aussi avec CGI::Session(); et toujours le meme message...

  4. #4
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Pour une de mes applis, j'ai fait comme ceci :
    - un seul script perl gère tout;
    - je teste la présence d'un "cookie" http avant chaque appel à la méthode header;
    - à chaque clic dans la page affichée, j'envoie des "param";
    - en fonction du "param", j'ai besoin de savoir si l'utilisateur est authentifié, donc je contrôle le contenu du cookie http, ou je redirige vers la fonction d'authentification si le cookie n'existe pas et j'en crée un à partir du login/pass saisi si les paramètres rentrés sont corrects.

    Je fais tout ceci avec le module CGI. Je t'invite à lire la doc dont le lien est dans ma signature et n'oublie pas use strict, c'est vital

  5. #5
    Invité
    Invité(e)
    Par défaut
    Moi aussi, je n'utilise que CGI. Regarde en signature le code de l'appli que je tente de mettre sur pied. Je créé les cookies via le module CGI uniquement, en y inscrivant le nom du user authentifié.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Effectivement, maintenant ca plante plus...

    Reste a savoir pourquoi il crée pas le cookie alors que je l'ai dans l'en-tete...

    j'ai donc créé un script qui crée le cookie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    use CGI;
     
    $query = new CGI;
     
    $cookie = $query->cookie(-name=>'sessionID',
                            -value=>'xyzzy',
                            -expires=>'+1h',
                            -path=>'/opt/****/tmp',
                            -secure=>0);
    print $query->header(-cookie=>$cookie);
     
     
    print "cookie créé!";
    et pour le récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use CGI;
     
    $query = new CGI;
    $cookie = $query->cookie(-name => "sessionID");
     
    print "récupération de $cookie";
    Mais évidemment ca affiche "récupération de " et rien de plus...
    L'en-tete HTTP de la page de création :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Date: Wed, 3 May 2006 11:34:24 GMT, Wed, 03 May 2006 11:34:24 GMT
    Server: IntraStore/2003
    Connection: Keep-Alive
    Content-Type: text/html; charset=ISO-8859-1
    Content-Length: 22
    Last-Modified: Wed, 3 May 2006 11:19:24 GMT
    Expires: Wed, 3 May 2006 11:19:24 GMT
    Set-Cookie: sessionID=xyzzy; path=/opt/****/tmp; expires=Wed, 03-May-2006 12:34:24 GMT
     
    200 OK
    Par contre, sur l'en-tete de la récupération, j'ai que dalle qui parle de cookie... Et j'ai rien non plus dans le dossier temporaire...

    je trouve vraiment pas ce qui bloque

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Personne qui peut m'aider???

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    snif

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Personne n'a la moindre idée?

    Meme pas une petite piste???


  10. #10
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    J'ai pris 2mn pour tester ton code, ca marche si tu vires le path pour sûr
    Essaie ce bout de code :
    le 1er coup tu l'appelles en virant les #1 (pour créer le cookie) le 2ème coup tu les remets et tu vires les #2, tu verras apparaitre la valeur du cookie, t'indiquant que tu le récupères bien

    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
     
    #!C:\Perl\bin\perl.exe
     
    use strict;
    use CGI;
     
    my $query = new CGI;
    #2 my $cookie = $query->cookie(-name => "sessionID");
    #1 my $cookie = $query->cookie(-name=>'sessionID',
    #1                        -value=>'xyzzy',
    #1                        -expires=>'+1h',
    #1                        -secure=>0);
    #1 print $query->header(-cookie=>$cookie);
    #2 print $query->header;
    print $query->start_html('');
     
    print "récupération de $cookie";
     
    print $query->end_html();
    @+
    Mr6

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Exact ca fonctionne, un grand merci

    Juste une chose qui m'embete, c'est que je suis censé utiliser un path bien précis pour mettre les cookies...

    Mais bon, faute de grive on mange des merles (comme on dit chez moi)

    Je ne mets donc pas le tag résolu puisque j'espere une derniere aide pour pouvoir mettre un path correct

  12. #12
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    bah en gros : pb de path = pb de droit je pense....

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Tu penses comme je pensais jusqu'a ce que je regarde et que ce soit pas ca

    C'est pas possible tout simplement car c'est le meme utilisateur qui crée et qui exécute les scripts. Et j'ai bien vérifié les droits.

    Soit-dit en passant, je n'ai pas trouvé ou il met ce cookie, donc si vous avez une idée...

  14. #14
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    ya des fois où il vaut mieux lire la doc avant de l'ouvrir... et comme je ne me sers jamais du paramètre path...
    Si vous précisez un attribut chemin (path) au cookie, le navigateur le comparera à l'URL de votre script avant de renvoyer le cookie. Par exemple, si vous donnez le chemin ``/cgi-bin'', alors le cookie sera renvoyé à chacun des scripts ``/cgi-bin/tally.pl'', ``/cgi-bin/order.pl'' et ``/cgi-bin/customer_service/complain.pl'', mais pas au script ``/cgi-private/site_admin.pl''. Par défaut, le chemin est mis à ``/'', ce qui oblige l'envoi du cookie à tous les scripts CGI de votre site.
    Donc path sert à définir un répertoire où tu veux que les scripts utilisent le cookie. En fait, c'est bien un problème de droit, puisque ton script doit être dans le répertoire défini dans le path du cookie pour pouvoir l'utiliser ! Et au passage, un cookie est stocké sur le client

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Points : 30
    Points
    30
    Par défaut
    Bien vu l'artiste

    Merci bcp pour ton aide, ca fonctionne niquel.

    Et pas bete le coup du cookie stocké sur le client... Aïe pas taper

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

Discussions similaires

  1. utilisation de CGI::Session
    Par nixonne dans le forum Web
    Réponses: 5
    Dernier message: 09/05/2006, 22h20
  2. scripts cgi sur serveur apache
    Par jejerome dans le forum Apache
    Réponses: 1
    Dernier message: 26/02/2006, 18h10
  3. cgi::session
    Par lolodev dans le forum Web
    Réponses: 5
    Dernier message: 04/12/2005, 21h26
  4. [installation de modules]CGI::Session
    Par bakonu dans le forum Web
    Réponses: 5
    Dernier message: 05/10/2005, 14h54
  5. Module CGI::Session
    Par dclink dans le forum Modules
    Réponses: 2
    Dernier message: 02/02/2004, 12h56

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