Thread CGI::Session und HTML-Seiten (10 answers)
Opened by eyekona at 2013-08-19 11:51

GwenDragon
 2013-08-19 12:54
#169628 #169628
User since
2005-01-17
14548 Artikel
Admin1
[Homepage]
user image
Quote
Gibt es irgendeine Möglichkeit in einer .html Datei zu prüfen, ob man eingeloggt ist?
Nein.

Frameseiten sind unpraktisch zu handeln.

Ich empfehle eher ein Template-System. Da kannst du die HTML-Seiten weiter benutzen, mit Variableninhalten versehen und in Abhängigkeit andere Inhalte ausgeben.
Das Perl-Programm nimmt die Anfragen entgegen (es kann auch je nach Server als CGI-Handler dienen), prüft per CGI::Session ob eingeloggt ist und gibt dann das HTML per Template aus.

Hast du schon mal Templatesysteme angesehen?
CPAN:HTML::Template::Compiled
CPAN:HTML::Template


Ein paar Beispielschnippsel.

index.html
Code (html): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<body>
<%IF .loggedin %>
<!-- hier erlaubte Inhalte nach login -->
<h1>Willkommen!</h1>
<p>Schön, dass du da bist, <%= .username %></p>
<%ELSE%>
<form action="#" method="post"> 
<input mame="username" value="<%= .username %>">
<input mame="password" value="<%= .password %>">
<input type="submit">
</form>
</%IF%>
</body>
</html>


index.pl
Code (perl): (dl )
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
use CGI::Session;
use HTML::Template::Compiled;

sub check_login {
  my $user = shift;
  my $pw = shift;
  
  # Teste ob login gültig und gib true zurück
  return 1 
    if ($user eq 'test' and $pw eq 'gehweg123geheim'); # oder sonstige Methode zum Test der Logindaten
  
  # sonst kein gültiges Login
  return;
}

my $htc;
my $session = new CGI::Session;

my $loggedin = $session->param('LOGGEDIN') == 1;
if (not $loggedin) {
  $loggedin = check_login($session->param('username'), $session->param('password'));
  $session->param('LOGGEDIN' => $loggedin); # Login in Session sichern
}

$htc = HTML::Template::Compiled->new(
  filename => '/var/www/vhosts/example.org/httpdocs/index.html'
);
$htc->param( 
  username => $session->param('username'),
  password => $session->param('password'),
  loggedin => $loggedin
);

print $session->header, $htc->output;

1;
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

View full thread CGI::Session und HTML-Seiten