Hi,
ich bastele gerade an meinem LDAP Adressbuch Manager über Web.
Ich habe ein hauptscript für den eigentlich monotonen Programmablauf und ein Modul das die eigentliche Arbeit macht.
Allerdings habe ich ein Problem mit CGI::Session im hauptprogramm denn das Hauptprogramm übernimmt auch das Session Handling.
Ich bin noch nicht mit CGI::Session so fit. Habe einen Test ohne MySQL als Backend gemacht bekomme jetzt jedoch eine komische Fehlermeldung...
Hier erst mal mein Hauptprogramm:
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
#!/usr/bin/perl
use strict;
use warnings;
use lib qw(../adbook/);
use CGI;
use DBI;
use CGI::Session;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use MyAdBookManager;
use HTML::Template;
# Benötigte Variablen initialisieren und definieren
my $session_dsn = "dbi:mysql:database=adbook_sessions;host=localhost;",
my $session_user = "xxxxxxxxxxxxxx";
my $session_pass = "xxxxxxxxxxxxxx";
my $sid = "SID";
# Benötigte Objekte erstellen
my $dbh = DBI->connect($session_dsn,$session_user,$session_pass,{PrintError=>0,RaiseError=>0})
or die DBI::errstr();
my $adbook = MyAdBookManager->new();
my $session = CGI::Session->load();
# Session verlängern falls noch nicht abgelaufen
unless ($session->is_expired()) { # Session abgelaufen oder existiert nicht
$session->new("driver:MySQL",$sid,{Handle=>$dbh});
$session->expire("+30m");# should be 3m for debugging and testing
}
my $userdn = $session->param("userdn") || CGI::param("userdn") || '';
my $passwd = $session->param("passwd") || CGI::param("passwd") || '';
my $authdn = $adbook->Auth($userdn,$passwd);
if (lc($authdn) eq lc($userdn)) {
# Wenn LDAP Authentifizierung erfolgreich Credentials in Session speichern ...
$session->param("userdn",$userdn);
$session->param("passwd",$passwd);
# ... und gewünschte Aktion vornehmen
$adbook->doAction(CGI::param("action") || '',CGI::Vars());
}
else {
# Ansonsten Login vorbereiten
$adbook->doAction("show_logon");
}
# Passendes Template laden und mit den passenden Werten ausfüllen
my $tmpl = HTML::Template->new(filename=>$adbook->requiredTemplate(),associate=>$session) or die $!;
for my $param ($adbook->Fields()) {
$tmpl->param(%$param);
}
# Und Bereit zur Ausgabe
print $session->header();
warningsToBrowser(1); # only for debugging
print $tmpl->output();
exit;
Ich bekomme beim Ausführen folgende Fehlermeldung:
Can't locate auto/CGI/Session/load.al in @INC (@INC contains: ../adbook/ /etc/perl /usr/lib/perl5/site_perl/5.8.6/i686-linux /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i686-linux /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.6/i686-linux /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.5/i686-linux /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.6/i686-linux /usr/lib/perl5/5.8.6 /usr/local/lib/site_perl .) at adbookmanager.pl line 24
Weis jemand was das heißt?
Hier ist nochmal das sehr rudimentäre Übungsscript an dem ich etwas versucht habe mit CGI::Session umzugehen.
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
use strict;
use warnings;
use CGI::Session;
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
use HTML::Template;
my $session = CGI::Session->load();
$session->new("SID") unless $session->is_expired();
my $template = '../login.html';
$session->expire("+3m");
CGI::param("user") and $session->param("user",CGI::param("user"));
$session->param("~is_logged_in",1) if CGI::param("user") ne "" && CGI::param("pass") ne "";
if ($session->param("~is_logged_in")) {
$template="../success.html";
}
else {
$session->delete();
}
my $tmpl = HTML::Template->new(filename => $template,associate=>$session) or die $!;
print $session->header();
warningsToBrowser(1);
print $tmpl->output();
exit;
Ich sehe den Fehler irgendwie nicht.
Gruß Alex