Schrift
[thread]262[/thread]

zum xten mal apache::session::*: wie genau funktionierts?



<< >> 4 Einträge, 1 Seite
Lukas
 2004-05-23 01:08
#2521 #2521
User since
2004-04-11
6 Artikel
BenutzerIn
[default_avatar]
ich hab hier im forum schon einiges gefunden, allerdings nur cgi::session und bei puretec ist nur apache::session installiert.

ich habe auch schon testcode gefunden der funktioniert, leider weiss ich nicht ganz genau was der code macht:

Code: (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
37
38
39
40
41
#!/usr/bin/perl



use CGI;
use Apache::Session::File;

my $query = new CGI;
my %session;
my $id = undef;

$id = $query->cookie(-name=>"SID01");
&acute;
# An dieser stelle komme ich nicht weiter. was genau macht # Apache::Session::File, bei Cpan steht da nicht gerade viel # dazu. Ist dieses /tmp/ verzeichnis auf dem client oder auf dem server?
# Wie kann ich überprüfen ob eine Datei erzeugt wurde? Wie kann ich weitere Daten ausser der sid in dieser Datei speichern? Wird die Datei nach einer bestimmten Zeit gelöscht?
# Leider sind bei puretec cronjobs nur ab dem PowerPaket möglich, deshalb wollte ich bei erzeugen einer sid gleich mit prüfen, ob noch alte ungenutze sid's vorliegen, die gelöscht werden
tie %session, 'Apache::Session::File', $id,
{ Directory => "/tmp/",
LockDirectory => "/tmp/"};


if ($id == undef) {
$cookie = $query->cookie( -name=>'SID01',
-value=>$session{_session_id},
-expires=>'+1y',
-path=>'/session');
print $query->header(-cookie=>$cookie);
print "Assigned session ID<br>";
} else {
print $query->header();
print "Not assigned session ID<br>";
};

$id = $session{_session_id};

print "<html>";
print " <head><title>Session ID</title></head>";
print " <body bgcolor=#ffffff>";
print " Your session ID is $id";
print " </body>";
print "</html>";



Hoffe das wird jetzt nicht zu unüersichtlich
coax
 2004-05-23 19:01
#2522 #2522
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Hi,

die Doku von Apache::Session erklaert die Verwendung von Apache::Session::File.
Apache::Session::File ist eine von Apache::Session abgeleitete Klasse (erbt also alles von Apache::Session),
die bindet die Komponenten von Apache::Session zusammen und gibt an wie die Daten verwaltet werden.

Die Verwendung ist einfach, du bindest ein Hash an die entsprechende Klasse (hier Apache::Session::File) und verwendest den Hash so wie sonst auch.
Code: (dl )
1
2
3
tie %session, 'Apache::Session::File', $id,
     { Directory => "/tmp/",
         LockDirectory => "/tmp/"};

Die zwei Parameter ($id und der anonym. Hash) sind optional.
Laesst du den ersten Parameter weg oder setzt ihn auf undef wird eine neue Session angelegt,
gibst du stattdessen eine gueltige SessionID an wird Session mit der ID wiederhergestellt.

Weitere Daten speicherst du wie bei jeden normalen Hash,
Code: (dl )
$session{foo} = 'bar';

ebenso liest du die Daten.
Code: (dl )
my $var = $session{foo};


Wenn du eine Session loeschen moechtest rufst du die Objektmethode des gebundenen Objekts auf, das geht zum Beispiel so:
Code: (dl )
tied(%session)->delete;

tied liefert das an %session gebunde Objekt zurueckt und dann wird dessen delete-Methode aufgerufen.

Quote
Ist dieses /tmp/ verzeichnis auf dem client oder auf dem server?

Es liegt natuerlich auf'm Server.

Quote
Wie kann ich überprüfen ob eine Datei erzeugt wurde?

Das Verzeichnis in dem die Sessiondateien gespeichert werden ist das was beim Binden
an den Hash bei Directory angegeben wurde, bzw. wenn keins angegeben wurde /tmp/.
Die Sessiondateien selbst tragen als Namen die Session-ID, so koenntest du also einfach mit
Code: (dl )
1
2
3
4
5
if( -e $session_verzeichnis . $id) {
   print "Datei existiert\n";
} else {
   print "Datei existiert nicht\n";
}

auf die Existenz pruefen.

Quote
Wird die Datei nach einer bestimmten Zeit gelöscht?

Wann die Session geloescht wird liegt bei dir, loeschen kannst du sie mit den oben beschriebenen delete().

Sieh dir auf jeden Fall erstmal Apache::Session an :)

Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
Strat
 2004-05-24 01:44
#2523 #2523
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
if ($id == undef) { ...} else { ... }

besser:
Code: (dl )
1
2
3
4
5
6
if (not defined($id)) {
# if-block
}
else {
# else-block
}

oder:
Code: (dl )
1
2
3
4
5
6
unless (defined($id)) {
# else-block
}
else {
# if-block
}
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Lukas
 2004-06-12 01:05
#2524 #2524
User since
2004-04-11
6 Artikel
BenutzerIn
[default_avatar]
Soo, ich hab mal hin und mal hergecodet, hat aber alles irgendwie nich so richtig funktioniert. Zumindest hab ich jetzt das cookie zum laufen gebracht. Da war ein Fehler mit dem Pfad, ohne Pfad funktioniert das ganze.

Was noch immer nicht funktioniert ist das mit dem tmp Verzeichnis. Ich habe das Verzeichnis auf dem Server erstellt (Puretec - Premium Paket). Schreibrechte haben bisher eigentlich immer funktioniert.


Code: (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
37
38
39
40
#!/usr/bin/perl
use warnings;
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use Apache::Session::File;

my $query = new CGI;
my %session;
my $id = undef;
my $cookie;

my $id = $query->cookie('SID01');

tie %session, 'Apache::Session::File', $id,
      { Directory => "/tmp/",
          LockDirectory => "/tmp/"};


unless (defined($id)) {
    $cookie = $query->cookie( -name=>'SID01',
                -value=>$session{_session_id},
                -expires=>'+1y'
);
    print $query->header(-cookie=>$cookie);
    print "Assigned session ID<br>";
}
else {
    print $query->header();
    print "Not assigned session ID<br>";
};

$id = $session{_session_id};

print "<html>";
print " <head><title>Session ID</title></head>";
print " <body bgcolor=#ffffff>";
print " Your session ID is $id";
print " </body>";
print "</html>";


hab auch mal mit

Code: (dl )
1
2
3
4
5
if( -e $session_verzeichnis . $id) {
  print "Datei existiert\n";
} else {
  print "Datei existiert nicht\n";
}

getestet. Leider wird mir immer angezeigt "Datei existiert nicht".

Kann sein, dass ich mich hier etwas zu n00big anstelle ;)

hier noch eine Übersetzung der Funktion tie von mir für alle die wie ich das noch nicht so ganz gerafft haben(wörtlich ;) ) :

tie VARIABLE,CLASSNAME,LIST
This function binds a variable to a package class that will
provide the implementation for the variable.  VARIABLE is the
name of the variable to be enchanted.  CLASSNAME is the name of
a class implementing objects of correct type.


tie VARIABLE, Klassenname, Liste

Diese Funktion bindet eine Variable an eine Paket Klasse, die die
Implementierung der Variable unterstützen wird.
VARIABLE ist der Name der Variable, die "verzaubert/entzückt" werden soll.
Klassenname ist der name der Klasse, die Objekte des richtigen Typs implementiert.

edit:

Hab alles zum laufen bekommen, wichtig ist nämlich, dass bei puretec nicht nur '/tmp' angegeben wird sondern der absolute pfad.
Sieht ungefähr so aus: '/homepages/21/d67481244/htdocs/tmp'\n\n

<!--EDIT|Lukas|1087028462-->
<< >> 4 Einträge, 1 Seite



View all threads created 2004-05-23 01:08.