Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^3: Cookies write to screen, not to cookie file

by antirice (Priest)
on Jul 01, 2004 at 21:07 UTC ( [id://371242]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Cookies write to screen, not to cookie file
in thread Cookies write to screen, not to cookie file

Uh...try this?

common.cgi

#!/usr/bin/perl #################################### use CGI qw/:standard/; use CGI::Cookie; sub write_cookie { my $c = new CGI::Cookie(-name => 'foo', -value => ['bar','baz'], -expires => '+3M' ); print header(-cookie=>[$c]); %cookies = fetch CGI::Cookie; ## This is very bad. You should check that $cookies{'ID'} exists ## or your script will die when you run this code. # $id = $cookies{'ID'}->value; ## You've already filled %cookies with the cookies. Why ## do it again? # %cookies = parse CGI::Cookie($ENV{COOKIE}); } 1;

script.pl

#!/usr/bin/perl require "common.cgi"; write_cookie(); print "Something";

antirice    
The first rule of Perl club is - use Perl
The
ith rule of Perl club is - follow rule i - 1 for i > 1

Replies are listed 'Best First'.
Re^4: Cookies write to screen, not to cookie file
by TJD (Initiate) on Jul 01, 2004 at 22:42 UTC
    Removing the two lines changed the output that I was getting with the CGI::Cookie previously. Instead of having the cookie data print out on a blank page, the cookie data now printed out just above the confirmation message, which is exactly what I was getting with my original, non CGI::Cookie code.

    Using the script.pl, the cookie writes to the cookie file as it should, but I don't have the data that I want to write, so it can't be incorporated in the system.

    It appears that I either need to somehow turn off the  content command that sets up the output buffer, or I need to go back to the drawing board and redo the system.

      This suggestion may tick you off, but it's only a suggestion. You may want to eventually migrate to something like CGI::Application. The way it works is that you build up the output in a run_mode and within this runmode you can change things such as what the headers will print when you're ready to go. HTTP is all text and certain things are expected to happen. Once you get beyond certain points (i.e. headers are already sent) then it's too late to send out cookies or anything else for that matter.

      A short-term possibility is to move most of the logic for detecting cookies and whatnot up towards the beginning of the script. Then you just set flags for later use but use them at the beginning while printing out the headers to make certain you send everything you need.

      Of course, I may be reading everything incorrectly and coming across as an idiot. If so, then I apologize as I've been up for an extraordinary amount of time.

      antirice    
      The first rule of Perl club is - use Perl
      The
      ith rule of Perl club is - follow rule i - 1 for i > 1

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://371242]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others studying the Monastery: (7)
As of 2024-03-28 19:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found