Schrift
[thread]628[/thread]

CGI::Session: Wie änder ich den Cookie Wert ?



<< >> 10 Einträge, 1 Seite
J-jayz-Z
 2005-12-17 13:43
#6319 #6319
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich wollte mit CGI::Session einen Login realisieren und mir merken, wer eingeloggt ist und wer nicht. Ich hab mir eine Methode geschrieben, die ich um das komplette script setze und es testet, ob ein Cookie gesetzt ist und die Variable ${user}_login true ist. Soweit geht es auch. Nur kann ich den Wert des Cookies nicht mehr verändern. Also wenn der User einmal eingeloggt ist, kann er sich praktisch nicht mehr ausloggen.
Mit
Code: (dl )
$session->param(-name => "${user}_login", -value => 0);
Ändert das (warum auch immer) überhaupt nichts. Auch mit clear() und delete() komme ich da nicht weiter ...
Jemand ne idee?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
J-jayz-Z
 2005-12-17 17:10
#6320 #6320
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich dachte mir, ich schau mir mal CGI::Cookie an, aber damit habe ich ebenso Probleme, mit $cookie->value(['eins', 'zwei', 'drei', 'vier']); die Werte zu ändern. Nun gut, was heißt Probleme, ich bekomm es einfach nicht gebacken.:
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
#!/usr/bin/perl -w
use strict;
use warnings;

use CGI;
use CGI::Cookie;
use Data::Dumper;

my $cgi    = CGI->new();
my $cookie = CGI::Cookie->new(
   -name  => 'Prefs',
   -value => { Name => 'foo', Value => 'lala', Login => 1 }
);

my $foo = get_values("Prefs");

if ( $foo->{Login} ) {
   print $cgi->header( -cookie => $cookie ), $cgi->start_html();
   print $cgi->b( "Hello " . $foo->{Name} );
   print $cgi->b( $cgi->br(), $cookie->name() );
   $cookie->value( [ 'bla', 'foo' ] );
}
else {
   print $cgi->header( -cookie => $cookie ), $cgi->start_html(),
     $cgi->b("New Login!");
}

print $cgi->pre( Dumper($foo) );
print $cgi->end_html();

sub get_values {
   my $name    = shift;
   my $bla     = {};
   my $foo     = CGI::Cookie->fetch();
   my $counter = 0;
   for ( 0 .. @{ $foo->{$name}->{value} } ) {
       unless ( $counter % 2 ) {
           if ( $foo->{$name}->{value}->[$_] ) {
               $bla->{ $foo->{$name}->{value}->[$_] } =
                 $foo->{$name}->{value}->[ $_ + 1 ];
           }
       }
       $counter++;
   }
   return $bla;
}
\n\n

<!--EDIT|esskar|1135015806-->
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-12-17 17:31
#6321 #6321
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
du weißt schon, dass sie werte erst bei der nächsten anfrage gesetzt sind!?!
J-jayz-Z
 2005-12-19 10:42
#6322 #6322
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja, weiß ich. Ich hab das alles versucht, nur ist es nicht möglich (oder zumindest mir) die Werte zu ändern.
Mein Problem ist folgendes: Ich will ein Cookie setzen, damit ein User eingeloggt ist. Wenn er sich ausloggt, will ich den Cookie löschen (normall $session->delete() aber es geht nicht..), damit er auf die Seiten nicht mehr zugreifen kann. Nur bekomm ich es nicht hin, mit dem ändern/löschen. Und daran hängt es, sonst ist alles fertig :(
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
Dubu
 2005-12-19 12:02
#6323 #6323
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
$session->delete() loescht keine Cookies, sondern nur die lokale Datenstruktur zur betreffenden Session. Der/das Cookie bleibt erhalten.

Zum Code mit CGI::Cookie: Du legst immer ein neues Cookie-Objekt $cookie an, liest als naechstes die vorhandenen Cookies in %$foo ein, schreibst dann aber im Header nur das neue Cookie-Objekt $cookie heraus, was immer den gleichen Eintrag enthaelt.



Edit: Formatierungsfehler\n\n

<!--EDIT|Dubu|1134986566-->
J-jayz-Z
 2005-12-19 15:03
#6324 #6324
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was meinst du mit dem gleichen Inhalt ?
Ich will ja den Login Status ändern und das ist ja genau das, was nicht klappt. Du meinst, ich lese die Cookie Daten ein und schreie dann ein neues Cookie mit geänderten Wert, damit ich den Status auslesen kann ?
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-12-19 20:11
#6325 #6325
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=J-jayz-Z,17.12.2005, 16:10]Nun gut, was heißt Probleme, ich bekomm es einfach nicht gebacken.:
Code: (dl )
# code siehe oben
[/quote]
wo setzt du Login auf 0 ?
es bleibt immer eins.
entweder weil es so im cookie steht oder weil du es neu setzt!
J-jayz-Z
 2005-12-20 09:26
#6326 #6326
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich hab mir jetzt selbst ein Modul geschrieben, das mit SessionIDs arbeitet, war mir zuviel rumgefummel ...
Die IDs werden in eine Datenbank gesichert und einem Username zugeordnet. Damit kann man dann den Login Status abfragen. Bei Gelegenheit poste ich es mal, kann aber nur von der Schule online kommen, da ich offline bin daheim ...
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de
esskar
 2005-12-20 13:35
#6327 #6327
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=J-jayz-Z,20.12.2005, 08:26]Ich hab mir jetzt selbst ein Modul geschrieben, das mit SessionIDs arbeitet, war mir zuviel rumgefummel ...[/quote]
hast du es yasm genannt ? (yet another session modul) :-)

aufgeben ist keine lösung.
Dubu
 2005-12-20 22:30
#6328 #6328
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Du liest ein und aenderst %$foo, aber du setzt immer nur $cookie!
<< >> 10 Einträge, 1 Seite



View all threads created 2005-12-17 13:43.