dobra: 2 Cookies gleichzeitig setzen

Hallo,

ich komme einfach nicht drauf, wie ich es machen kann, 2 Cookies gleichzeitig zu setzen :(

So funktioniert mein Script (mit einem Cookie)

		use strict;  
		use CGI qw(:standard);  
		my $q = CGI->new();  

			my $cookie = $q->cookie(  
			-name=>'comment',  
			-value=>$email,  
			-expires=> '+10y');  
			  
			print redirect(  
			-URL => "$ssp::xxpath?udc\_1300006450,\_\_xxsession\_\_,,,artnr=$itemid",  
			-COOKIE => $cookie  
			);  

Cookie wird korrekt gesetzt und Seite neu geladen damit ich es sofort abfragen kann
if ($email = $cookie) { mach was }
else { mach was anderes }

um gleichzeitig ein 2. Cookie zu setzen, habe ich es so versucht - geht aber nicht ...

		use strict;  
		use CGI qw(:standard);  
		my $q = CGI->new();  
		$\ = "\n";  
		my $cookie;			  
			$cookie .= $q->cookie(  
			-name=>'comment',  
			-value=>$email,  
			-expires=> '+10y');  
			$cookie .= $q->cookie(  
			-name=>'testcookie',  
			-value=>$autor,  
			-expires=> '+10y');  
			  
			print redirect(  
			-URL => "$ssp::xxpath?udc\_1300006450,\_\_xxsession\_\_,,,artnr=$itemid",  
			-COOKIE => $cookie  
			);  

es wird NUR das erste Cookie gesetzt.

Wenn dieser Versuch sehr dumm ist (und noch ein paar andere in dieser Richtung) bitte um Nachsicht ;)
Habe erst gestern angefangen, mich mit Cookies zu beschäftigen.

Kann mir bitte jemand helfen?

mfg
dobra

  1. Kann mir bitte jemand helfen?

    To create multiple cookies, give header() an array reference:

    $cookie1 = cookie(-name=>'riddle\_name',  
    			  -value=>"The Sphynx's Question");  
    $cookie2 = cookie(-name=>'answers',  
    			  -value=>\%answers);  
    print header(-cookie=>[$cookie1,$cookie2]);  
    

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. vielen DANK!!!

      genau das ist es :D

      lg aus Wien

  2. Hallo dobra!

    Nur ein Hinweis...

    use CGI qw(:standard);  
    my $q = CGI->new();
    

    Wenn Du die objektorientierte Variante benutzt (my $q = $CGI->new()), dann kannst Du die Methoden vom CGI-Modul objektorientiert ansprechen: $q->param(), $q->header(), ... , und es ist nicht notwendig, irgendwelche Methodennamen zu importieren, wie Du es in Deiner ersten Zeile tust.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --
    _ - jenseits vom delirium - _

       Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
    1. Hallo Patrick,

      sorry, aber das verstehe ich jetzt nicht ganz :(
      meinst Du damit, daß ich nur
      use CGI;
      statt
      use CGI qw(:standard);
      schreiben brauche?

      oder ist auch an meinem Code dann noch was falsch?

      lg
      dobra

      1. Hallo dobra!

        oder ist auch an meinem Code dann noch was falsch?

        nein, in Deinem Code ist nichts »falsch«.

        Wenn Du es so lässt, wie bisher, machst Du im Grunde nichts Falsches. Das ist nur eine Sache des Verständnisses.

        Das CGI-Modul läßt sich auf gewöhnliche Weise, wie auch objektorientiert einsetzen.

        Die »gewöhnliche« Weise besteht darin, in seinen eigenen Namensraum (::main, also den Hautpskript), die Methoden zu importieren, die man im Skript benötigt:

        use CGI qw/header param/;  
          
        ...  
          
        print header();  
        my $some_param = param('some');  
        
        

        Die objektorientierte Weise importiert gar keine Methode, sonst ruft sie über die Objektinstanz auf:

        use CGI;  
          
        my $cgi = CGI->new();  
          
        print $cgi->header();  
        my $some_param = $cgi->param('some');
        

        Durch die objektorientierte Weise läufst Du nicht Gefahr, aus Versehen eine eigene Funktion (sub) genauso zu benennen, wie eine, die Du aus dem Modul importierst. Du kannst eine eigene sub  param [} nennen, es wird nie Konflikte geben, denn die Method param() aus dem CGI-Modul wird nur dann nur durch $cgi->param() augerufen.

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --
        _ - jenseits vom delirium - _

           Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
        1. Hallo Patrick!

          Durch die objektorientierte Weise läufst Du nicht Gefahr, aus Versehen eine eigene Funktion (sub) genauso zu benennen, wie eine, die Du aus dem Modul importierst. Du kannst eine eigene sub  param [} nennen, es wird nie Konflikte geben, denn die Method param() aus dem CGI-Modul wird nur dann nur durch $cgi->param() augerufen.

          Und hier zum auf der Konsole testen:

          C:>perl -w

          use strict;  
          use CGI;  
            
          my $cgi = CGI->new();  
            
          print $cgi->header();  
          print header();  
            
          sub header {  
            return 'Content-type: HowToMakeL...; charset=who can can';  
          }
          

          Ausgabe:
          Content-Type: text/html; charset=ISO-8859-1

          Content-type: HowToMakeL...; charset=who can can

          Erste Zeile: Rückgabewert von header() aus dem CGI-Modul.
          Zweite Zeile (leer): ebenso (sonst schreibt man nicht umsonst zwei \n nach einem Header)
          Dritte Zeile: Rückgabewert aus der »eigenen« header()-Funktion...

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --
          _ - jenseits vom delirium - _

             Diblom   [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          J'ai 10 ans! | Achtung Agentur! | Nichts ist unmöglich? Doch! | Heute schon gegökt?
          1. Hallo Patrick!

            Vielen Dank für die (sogar für mich ;) ) verständlich geschriebene Erklärung und vor allem für das Beispiel!
            mit "learning by doing" = wenn ich ein konkretes Beispiel zum experimentieren habe - verstehe ich alles viel besser :D

            lg aus Wien
            dobra