Embperl - building dynamic websites with Perl


Session Handling (ab 1.2b2)
[ << Prev: Vordefinierte Variablen ] [ Content ] [ Next: (Sichere-)Namensräume und Opcode Restriktionen >> ]

Embperl ist in der Lage, Daten pro Benutzer für Sie zu verwalten. Sobald Sie Daten in den Hash %udat schreiben, sorgt Embperl dafür, dass die selben Daten wieder verfügbar sind, sobald der selbe Benutzer eine weitere Seite aufruft.

Weiterhin können Sie Daten in dem Hash %mdat ablegen, diese sind der aktuellen Seite zugeordnet und werden wieder hergestellt, sobald ein beliebiger Benutzer die selbe Seite aufruft.

Im Gegensatz zu einfachen globalen Variablen, ist der Zugriff auf die Inhalte von %udat und %mdat bei entsprechender Konfiguration, auch über Prozeß- oder sogar Rechnergrenzen hinweg möglich. Embperl bedient sich dazu des Perlmodules Apache::Session.

Ab 1.3.4 verwendet Embperl Apache::SessionX für das Sessing handling. Dadurch ist keine weitere Konfiguration mehr nötig. Wenn Sie das alte Sessionhandling (ohne Apache::SessionX) beibehalten wollen, müssen Sie

    PerlSetEnv EMBPERL_SESSION_HANDLER_CLASS Embperl::Session

in Ihrer httpd.conf eintragen und folgende Parameter konfigurieren. Sie können die folgenden Parameter auch zum überschreiben der Standardkonfiguration von Apache::SessionX benutzen.

Um das Session Management zu aktivieren muß Apache::Session (Version 1.53 oder höher) installiert sein. Außerdem müssen Sie Embperl, via EMBPERL_SESSION_CLASSES, mitteilen, welcher Speicher- und Lockingmechanismus genutzt werden soll, ggf. müssen Sie auch weitere Argumente für Apache::Session setzen. Um z.B. eine MySQL Datenbank zur Speicherung der Sessions zu benutzen, könnte die Datei startup.pl folgendermaßen aussehen:

 BEGIN
    {
    $ENV{EMBPERL_SESSION_CLASSES} = "MySQL Semaphore" ;
    $ENV{EMBPERL_SESSION_ARGS}    = "DataSource=dbi:mysql:session UserName=test" ;
    } ;
 use Embperl ;

Dass selbe kann stattdessen auch direkt in die httpd.conf eingetragen werden:

 PerlSetEnv EMBPERL_SESSION_CLASSES "MySQL Semaphore"
 PerlSetEnv EMBPERL_SESSION_ARGS "DataSource=dbi:mysql:session UserName=test"
 PerlModule Embperl ;

Konsultieren Sie die Dokumentation von Apache::Session (in diesem Fall Apache::Session::Store::MySQL) für Informationen wie die Datenbanktabellen dazu aussehen müssen.

EMBPERL_SESSION_ARGS ist eine Leerzeichen separierte Liste von Name/Wert Paaren die zusätzlich Parameter für die Apache::Session Klassen angeben können.

Hier ist ein weiteres Beispiel für die Speicherung der Sessiondaten im Dataisystem:

PerlSetEnv EMBPERL_SESSION_CLASSES "File Semaphore" PerlSetEnv EMBPERL_SESSION_ARGS "Directory=/path/to/your/sessions"

Konsultieren Sie die Dokumentation von Apache::Session um zu erfahren welche weiteren Speichermöglichkeiten es gibt.

Zusätzlich (optional) zur zur Speicher- und Lockingklasse können in EMBPERL_SESSION_CLASSES zwei weitere Klassen angegeben werden. Die erste ist für die Serialisierung der Daten zuständig (Default: Storable) und die zweite für sas erzeugen der ID (Default: MD5).

HINWEIS: Die obige Konfiguration funktioniert nur mit Apache::Session 1.52 und Embperl 1.3b5 oder höher. Ältere Konfigurationen mit Apache::Session werden weiterhin unterstützt, Ältere Versionen von Embperl unterstützen nur Apache::Session 1.0x, welches eine andere Konfiguartion von $ENV{EMBPERL_SESSION_CLASSES} erfordert (z.B. $ENV{EMBPERL_SESSION_CLASSES} = "DBIStore SysVSemaphoreLocker" ; ).

Damit ist das Session Handling eingerichtet und der Benutzung der Hashs %udat und %mdat steht nichts mehr im Wege. Dabei wird das Session Handling nur dann aktiv, wenn Sie auf einen der zwei Hashs zugreifen. Beim ersten Zugriff erzeugt Embperl bzw. Apache::Session eine Session ID. Für Benutzerbezogene Session wird diese Id mittels eines Cookies zum Browser gesandt. Außerdem veranlasst Embperl Apache::Session die Daten zu speichern. Empfängt Embperl einen solchen Cookie mit einer Id, wird diese zunächst nur abgespeichert, erst bei einem Zugriff auf %udat, werden die Daten tatsächlich von Apache::Session angefordert. Ebenso werden die Daten für %mdat erst von Apache::Session angefordert, wenn auf diesen Hash zugegriffen wird.



Funktionen/Methoden fürs Session Handlingtop


Embperl::Req::SetupSession ($req_rec, $Inputfile) [1.3b6+]top

Diese Funktion kann von Skripten benutzt werden die in ihrem Verlauf Embperl::Execute aufrufen, jedoch vorher schon auf die Sessiondaten von Embperl zugreifen wollen.

 

$req_rec

 

Apache request record soweit das Skript unter mod_perl läuft, ansonsten undef.

 

$Inputfile

 

Name der Datei die später von Embperl bearbeitet werden soll. Dient dazu %mdat zu initialsieren. Wird %mdat nicht benötigt, kann dieser Parameter weggelassen werden.

Liefert eine Referenz auf %udat oder, wenn es in einem Arraykontext aufgerufen wird, eine Referenz auf %udat und %mdat zurück. Siehe auch CleanupSession.



Embperl::Req::GetSession / $r -> GetSession [1.3b6+]top

Liefert eine Referenz auf %udat oder, wenn es in einem Arraykontext aufgerufen wird, eine Referenz auf %udat und %mdat zurück. Dies Funktion kann benutzt werden um auf die Embperl Sessiondaten aus einem Modul zuzugreifen, wenn das Session Handling bereits initialisiert ist. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.



Embperl::Req::CleanupSession / $r -> CleanupSession [1.3b6+]top

Muß am Ende jedes Skripts aufgerufen werden, welches SetupSession benutzt, danach aber nicht Embperl::Execute aufruft. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.



Embperl::Req::DeleteSession / $r -> DeleteSession [1.3b6+]top

Löscht die Sessiondaten und entfernt den Cookie vom Browser. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.



Embperl::Req::RefreshSession / $r -> RefreshSession [1.3b6+]top

Stößt das nochmalige senden des Cookies an. Normalerweise wird der Cookie nur beim ersten Mal gesendet. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.



Embperl::Req::SetSessionCookie / $r -> SetSessionCookie [1.3b7+]top

Muß von Skripts aufgerufen werden, welches SetupSession benutzen, danach aber nicht Embperl::Execute aufrufen, um den Cookie für sie Session-Id zu setzen. Dies wird normalerweise durch Embperl::Execute erledigt. Wenn es als eine Methode aufgerufen wird muß $r ein Embperl::Req Objekt sein. Dieses wird als erster Parameter in @_ an jede Seite übergeben.


[ << Prev: Vordefinierte Variablen ] [ Content ] [ Next: (Sichere-)Namensräume und Opcode Restriktionen >> ]


© 1997-2023 Gerald Richter / actevy