Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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 :
    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 :
    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
    Membre Expert
    Homme Profil pro Stéphane
    Inscrit en
    novembre 2005
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 1 901
    Points : 2 296
    Points
    2 296

    Par défaut

    Essaie plutôt
    Code :
    $session = new CGI::Session();
    Et veux-tu gérer ta session uniquement par cookies ? Ou bien côté serveur aussi ?

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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 chevronné

    Homme Profil pro
    Inscrit en
    septembre 2004
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2004
    Messages : 603
    Points : 751
    Points
    751

    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
    Membre Expert
    Homme Profil pro Stéphane
    Inscrit en
    novembre 2005
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane
    Localisation : France

    Informations forums :
    Inscription : novembre 2005
    Messages : 1 901
    Points : 2 296
    Points
    2 296

    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
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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 :
    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 :
    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 :
    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
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    Par défaut

    Personne qui peut m'aider???

  8. #8
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    Par défaut

    snif

  9. #9
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    Par défaut

    Personne n'a la moindre idée?

    Meme pas une petite piste???


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

    Homme Profil pro
    Inscrit en
    septembre 2004
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2004
    Messages : 603
    Points : 751
    Points
    751

    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 :
    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
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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 chevronné

    Homme Profil pro
    Inscrit en
    septembre 2004
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2004
    Messages : 603
    Points : 751
    Points
    751

    Par défaut

    bah en gros : pb de path = pb de droit je pense....

  13. #13
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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 chevronné

    Homme Profil pro
    Inscrit en
    septembre 2004
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2004
    Messages : 603
    Points : 751
    Points
    751

    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
    Candidat au titre de Membre du Club
    Inscrit en
    avril 2005
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : avril 2005
    Messages : 70
    Points : 13
    Points
    13

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •