Apache::Session]
www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Zustandserhaltung mit Apache::Session

Motivation

Im Buch haben wir verschiedene Methoden der Zustandserhaltung kennengelernt. Dabei haben wir uns vorallem mit der technischen Realisierung befaßt. Im Wesentlichen geht es darum, die Zustandsvariablen irgendwo zu sichern, damit sie bei einer späteren Invokation des CGI-Programms wiederverwendet werden. Dies war durch folgende Techniken möglich:

Dabei haben wir uns auch damit befaßt, wie die clientseitig gespeicherte Information vor Veränderung (durch Signatur) oder sogar vor unberechtiger Ansicht (durch Verschlüsselung) geschützt werden konnte.

All diese Methoden sind zwar technisch interessant, müssen aber in konkreten Anwendungen erst eingebunden werden. Dabei haben wir versucht, ein einheitliches Framework einzuhalten, das diese Aufgabe erleichern soll. Eine alternative Methode der Zustandserhaltung in professionellen Anwendungen ist das CPAN-Modul Apache::Session. Dieses faßt die oben besprochenen Techniken zusammen und ist auch in seiner Anwendung sehr flexibel. In den folgenden Abschnitten werden wir Apache::Session kennenlernen und anhand kleiner Beispielprogramme sehen, wie einfach dessen Anwendung sein kann.

Das Apache::Session-Modul und seine Verwendung

Das Programm apache-session1.pl orientiert sich in seiner Grundstruktur an die Zustandserhaltungsbeispiele aus dem Buch. Auch wenn es einfacher hätte geschrieben werden können, haben wir die Struktur mit den drei Funktionen retrieve_state(), compute_next_state() und save_state() beibehalten, um die Analogie deutlich zu zeigen.

Schauen wir uns dieses Programm etwas näher an:

Die Architektur der Apache::Session::* Module

Es scheint zunächst so, daß um Apache::Session zu benutzen, eine DBI-Datenbank unabdingbar wäre. Dem ist jedoch nicht so! Der Grund ist, daß Apache::Session zur Realisierung der Persistenz diverse Backing-Store-Objekte verwenden kann:

Bei Einsatz eines Backing-Store-Objekts ist es jedoch auch wichtig, die Zugriffe auf die gemeinsame speichernde Ressource zu synchronisieren. Schließlig laufen auf einem Unix-Rechner zu einer bestimmten Zeit durchaus mehrere httpd-Prozesse! Die Synchronisation erfolgt nun mit Hilfe eines Synchnisationsobjekts. Apache::Session kennt mehrere solcher Objekte:

Um nun eine allgemeine Session-Klasse zu erzeugen, kombinieren Sie üblicherweise Apache::Session mit einer Backing-Store-Klasse und einer Synchronisationsklasse Ihrer Wahl. Die in apache-session1.pl verwendete Klasse Apache::Session::DBI ist hierbei lediglich eine Klasse, die sich aus der Basisklasse Apache::Session, der Backing-Store-Klasse Apache::Session::DBIStore sowie der Synchronisationsklasse Apache::Session::SysVSemaphoreLocker wie folgt zusammensetzt:

package Apache::Session::DBI;

use strict;
use vars qw(@ISA $VERSION);

$VERSION = '1.00';
@ISA = qw(Apache::Session);

use Apache::Session;
use Apache::Session::SysVSemaphoreLocker;
use Apache::Session::DBIStore;

sub get_object_store {
    my $self = shift;

    return new Apache::Session::DBIStore $self;
}

sub get_lock_manager {
    my $self = shift;
    
    return new Apache::Session::SysVSemaphoreLocker $self;
}

1;
Es steht Ihnen frei, die Klassen beliebig zu kombinieren, je nach Erfordernissen. man Apache::Session listet folgende typische Kombinationen auf:

Nichts hindert Sie natürlich daran, selbst weitere Backing-Store-- oder Synchronisationsklassen zu spezifizieren und ähnlich mit Apache::Session zu kombinieren.

Folgende Klassen sind (Stand Apache::Session-1.0.3) bereits vordefininiert:

Darüberhinaus sind auch die Klassen Apache::Session::Counted und Apache::Session::Tree, sowie den experimentellen Backing-Store Apache::Sessin::TreeStore definiert.

Mehr Informationen finden Sie in man Apache::Session.

[Prev] [Up] [Next]

[Alte Quelle]


Last modified: $Date: 2006/05/18 12:55:46 $
FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy
FreeBSD Logo