Schrift
[thread]220[/thread]

Session gesucht: Womit arbeitet ihr? (Seite 2)



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
pktm
 2004-04-11 11:35
#1875 #1875
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ja, wie gesagt, diese Doku ist echt gut, aber ich suche auch eher die direkte Verwendung im Code, wie ist das Scipt aufgebaut, überprüft ihr auf bestimmte Parameter, benutzt ihr zwingend Cookies, IP-Sperre etc.
Mein Ansatz sieht im MOment so aus:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# ---- CGI
my $cgi = CGI->new();                                                           # neues CGI-Objekt erzeugen
my $query = $cgi->Vars();                                                       # Parameter in Hash einlesen
# ---- SESSION - Settings (wird erst nach Login erstellt)
$ldata->{'data'}->{'sessionFolder'} = File::Spec->tmpdir() if File::Spec->tmpdir();
my $session = new CGI::Session(undef, $cgi, {Directory=>$ldata->{'data'}->{'sessionFolder'}});
$session->name("sid");
$session->expire($ldata->{'data'}->{'sessionExpires'});
$session->load_param($cgi); # felder angeben?
# ---- TEMPLATE
my $template = HTML::Template->new(
   filename => $ldata->{'data'}->{'main_template'},
   die_on_bad_params => $ldata->{'data'}->{'template'}->{'die_on_bad_params'},
   vanguard_compatibility_mode => $ldata->{'data'}->{'template'}->{'vanguard_compatibility_mode'},
   strict => $ldata->{'data'}->{'template'}->{'strict'},
   associate => [$cgi, $session],
   case_sensitive => 1,
); #
$ldata->setGlobTemplateVars( $template );
# --------------------------------------------------------
# LOGIK
# --------------------------------------------------------

if( $session->param('logedIn') ) { # wenn session existiert

# -------------- main-logic-part

$ldata->setSeite( $template, 'Administration', "Session: $session->id(); Status: " . $session->param('logedIn') );

# -------------- /main-logic-part

}else{ #wenn keine session existiert / session nicht gültig ist
if(exists($query->{'action'})
and defined($query->{'action'})
and $query->{'action'} eq 'login'
and exists($query->{'usn'})
and defined($query->{'usn'})
and exists($query->{'pwd'})
and defined($query->{'usn'}) ){
# Wenn Login, Action, USN und PWD übergeben, Validate!
if( main::login( $query->{'usn'}, $ldata, $dbh ) ){
# Fehler beim Login (falscher USN | falsches PWD), erneut einloggen
$ldata->setSeite( $template, 'Login - Fehler', main::getTemplate('s_login', $ldata, [$template]) );
}else{
# Login ok, weiter
main::setLoginDaten( $session, $cgi );
# -- Ausgabe setzen
$ldata->setSeite( $template, 'Login erfolgreich', main::getTemplate('s_login_succes', $ldata, [$template]) );
}
}else{
# Erstaufruf Login-Form
$ldata->setSeite( $template, 'Login', main::getTemplate('s_login', $ldata, [$template]) );
}
}

# -- Ausgabe
print $cgi->header(-expires=>'+1s',
-type=>'text/html',
-cookie=> $cgi->cookie( 'sid' => $session->id() ),
);
warningsToBrowser(1);
main::setBenchmark( $template ); # Benchmark
print $template->output();


Und da das nicht wirklich viel ist, bzw. auch ncoh  nicht geht ( :blush: ) dachte ich mir, ich sehe mir mal ein Beispiel der Verwendung davon an.
mfg pktm

EDIT: Code aktualisiert\n\n

<!--EDIT|pktm|1081705608-->
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2004-04-11 15:08
#1876 #1876
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
benutz mal bitte mehrer unterfunktionen... :)
pktm
 2004-04-11 17:09
#1877 #1877
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Du meinst den Code in Subs auslagern?
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2004-04-11 17:26
#1878 #1878
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pktm,11.04.2004, 15:09]Du meinst den Code in Subs auslagern?[/quote]
jo
pktm
 2004-04-11 21:49
#1879 #1879
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ist getan, jetzt kommt das Sessionmanagement auch eher raus.
Hier die "wichtige" Session-Sub:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
sub setLoginDaten {
my $session = shift;
my $cgi = shift;
$session->param('logedIn', 1); # Login-Status setzen
$session->param('usn', $query->{'usn'});
$session->param('sid', $session->id() );
# self setzen!!!
$session->param('self', $ldata->{'data'}->{'url'}->{'admin'} .'?sid=' . $session->id() );
$session->expire('logedIn', $ldata->{'data'}->{'session_time'});
} # /setLoginDaten


Dachte mir das so:
Ich setze bei erfolgreichem Login einen Parameter in der Session der x ms gültig ist.
Wenn der nicht mehr da ist, also undef zurück liefert ist man nicht mehr eingeloggt.
Aber irgendwie klappt das bei mir nicht :(
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pktm
 2004-04-12 01:35
#1880 #1880
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Habe den fehler gefunden, warum meine Session nicht funktionierte...
Ich habe $session->name("sid"); nach der Erstellung der Session gesetzte, das muss aber per CGI::Session->name("sid"); VORHER passieren...
jaja, use strict; (vgl. Doku)
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2004-04-12 02:13
#1881 #1881
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wieso benutzt du eigentlich kein use strict; ?
pktm
 2004-04-12 03:48
#1882 #1882
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Ich benutze use strict;
Deswegen habe ich $session->name() auch nach der Deklaration von $session verwendet, weil es vorher ja nicht geht.
In dem Tutorial steht aber:
Quote
CGI::Session->name("MY_SID");
# or
$session->name("MY_SID");

$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});

Da wird $session angesprochen, bevor es überhaupt definiert ist.
http://www.intergastro-service.de (mein erstes CMS :) )
pfuschi
 2004-04-12 15:23
#1883 #1883
User since
2004-03-31
198 Artikel
BenutzerIn
[default_avatar]
servus,
jup das ist dort etwas missverständlich erklärt, hab grad selber gebraucht bis ich es verstanden hab, oder zumindest denke ich dass ich es kapiert habe *G*
Code (perl): (dl )
  $session->name("sid");

geht natürlich nur wenn $session auch ein richtiges CGI::Session Objekt ist, was ja nicht der Fall ist  (und in den meisten Fällen so sein wird da es wohl kaum die Notwendigkeit gibt "name" nach der erzeugung einer Session zu ändern)
Aber ein
Code (perl): (dl )
 CGI::Session->name("sid");

sollte auch vor "new" funtkionieren.

Du mußt dir vor Augen halten dass innerhalb $session wenigstens der Packagename enthalten sein muss, sonst geht die Pfeilnotation natürlich nicht. In Objekten ist der Package Name ja via bless() abgelegt.
Folgendes sollte auch zum gewünschten Ergebniss führen.
Code (perl): (dl )
1
2
3
my $session = "Session"; # Package Name ablegen
$session->name("sid");
$session = new CGI::Session(undef, $cgi, {Directory=>'/tmp'});


hoffe das stimmt so...

greetz & fetten Segen
manu
PCE - Editor für Perl in Perl
Bookzilla.de - Mit jedem Kauf OpenSource unterstützen
"I know I can't hold the hate inside my mind
cause what consumes your thoughts controls your life"
- Creed
pktm
 2004-04-12 18:00
#1884 #1884
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Jo, habe es mit CGI::Session->name("sid"); gemacht, weil der Treiber für Datenbanken etc. z.B. auch so VOR Erstellung des Session-Objektes geladen wird ( oder so ähnlich, vgl. Session::MySQL).
Aber ich muss sagen, das Teil ist mir bis jetzt recht sympatisch, man sollte nur nicht vergessen die Expires der Session zu setzen (habe zuerst das Sandard-Temp-Verzeichnis via File::Spec genommen und musste dann 200 Sessions von meiner Platte löschen ^^)
mfg pktm\n\n

<!--EDIT|pktm|1081778514-->
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2004-04-03 21:00.