[PERL]Problème sur la gestion des sessions
Bonjour tout le monde,
Je dois gérer des sessions en perl.
Après avoir rempli un formulaire d'authentification dans le fichier index.pl, une session se crée.
Cette étape marche parfaitement bien.
En revanche dès que je fais une action et que je veux récupérer les données de ma session, je n'y arrive pas. Je récupère un autre id.
Voici mon code.
Le formulaire :
Code:
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
|
#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use strict;
#Affichage de la page web
#------------------------
print "Content-type: text/html\n\n";
print <<'EOT';
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Test Vmware</title>
</head>
<body>
Accueil Vmware !
<form action="vm_view.pl" method="post">
<input type="hidden" Name="type" Value="Authentication" >
Username: <input type="text" Name="username" Value="" > <br>
Password: <input type="password" Name="password" Value="" > <br>
<input type="submit" Name "Submit" Value="Sign">
</form>
</body>
</html>
EOT |
Et voici le fichier appelé vm_view.pl :
Code:
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
|
#!/usr/bin/perl
use lib qw{ blib/lib blib/auto blib/arch blib/arch/auto/VMware blib/arch/auto };
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Session;
use VMware::Vix::Simple;
use VMware::Vix::API::Constants;
#use VMware::Vix::Vm_Action;
require "vm_action.pl";
#Authentication
my $buffer;
if ($ENV{'REQUEST_METHOD'} eq "POST" ) {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
#Treatment and cutting
my @pairs;
my $pair;
my $name;
my $value;
my %FORM;
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
#Variable declaration
my $url = "https://test:8333/sdk";
my $err = VIX_OK;
my $hostHandle = VIX_INVALID_HANDLE;
my $vmHandle = VIX_INVALID_HANDLE;
my $hostname_printable = `hostname`; chomp($hostname_printable);
my @listVMs = ();
#HTML header
print "Content-type: text/html\n\n";
print <<'EOT';
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>Test Vmware</title>
</head>
<body>
EOT
# Get the CGI form data
my $cgi = new CGI;
#Connection
if ($FORM{'type'} eq "Authentication"){
my $username = $FORM{'username'};
my $password = $FORM{'password'};
($err,$hostHandle)= Connection($url,$username,$password);
if ($err == VIX_OK){
print "<p><b>Welcome ".$username."</b></p>";
}
else {
print "<b>Connection failed :</b><br>Error ".$err.", ".GetErrorText($err);
exit();
}
#die "Connection failed, $err ", GetErrorText($err), "\n" if $err != VIX_OK;
#Start session
my $session = new CGI::Session("driver:File", $cgi, {Directory=>"C:/Temp"}) or die CGI::Session->errstr;
#my $session = new CGI::Session() or die CGI::Session->errstr;
my $cookie = $session->cookie( -name => $session->name,
-value => $session->id );
#print $session->header( -cookie=>$cookie );
print $cookie;
#print $session->header;
$session->param('username', $username);
$session->param('password', $password);
$session->param('handle', $hostHandle);
print $session->param('username');
print $session->param('password');
print $session->param('handle');
}
else {
my $sid = $cgi->cookie("CGISESSID") || undef;
my $session = new CGI::Session($sid);
$hostHandle=$session->param('handle');
print $session->header;
#print $session->param('username');
#print $session->param('password');
#print $session->param('handle');
} |
Je vous épargne la fin du fichier.
Est-ce que vous voyez le problème au niveau de la gestion des sessions ?
Le code me semble bon d'apres ce que j'ai vu sur Internet.
Merci d'avance si vous pouvez m'aider.