Session Handling (ab 1.2b2) |
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 Handling | top |
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.
|