Hello, While trying to add CGI::Application::Plugin::Session to an existing application, I came across a potential conflict between the encoding pragma and CGI::Session that I'm looking for feedback on.
This isn't a CGI::Application issue but I figured since there are plugins to incorporate CGI::Session with CGI::Application that it would be okay to post this here. That, and Mark maintains both modules. :) I've tried to distill this to the barest elements (CGI::Application and CAP::Session aren't involved): [...@unixbox1:~]> cat testutf8.pl #!/usr/bin/perl use strict; use warnings; # http://perldoc.perl.org/5.8.8/encoding.html #use encoding 'utf8'; use CGI; use CGI::Session; my $query = new CGI(); my $session = new CGI::Session(undef, $query, undef); if (!$session) { die "Error instantiating CGI::Session: $...@\n"; } my $session_id = $session->id(); print "session id: $session_id\n"; if (!$ENV{HTTP_COOKIE}) { # new session print "adding { name => 'value' } to session\n"; $session->param( name => 'value' ); } else { # existing session print 'retrieving name from session: ' . $session->param('name') . "\n"; } [...@unixbox1:~]> ./testutf8.pl session id: 5db231f9102f9067bdb384df7227c096 adding { name => 'value' } to session [...@unixbox1:~]> cat /tmp/cgisess_5db231f9102f9067bdb384df7227c096 $D = {'_SESSION_ID' => '5db231f9102f9067bdb384df7227c096','_SESSION_ATIME' => 1283525840,'name' => 'value','_SESSION_REMOTE_ADDR' => '','_SESSION_CTIME' => 1283525840};;$D [...@unixbox1:~]> env HTTP_COOKIE="CGISESSID=5db231f9102f9067bdb384df7227c096" ./testutf8.pl session id: 5db231f9102f9067bdb384df7227c096 retrieving name from session: value ... works fine. When I uncomment the "use encoding 'utf8';" statement, things go awry: [...@unixbox1:~]> ./testutf8.pl session id: dc43ad7276188fb45b386135a4b3d5e1 adding { name => 'value' } to session [...@unixbox1:~]> cat /tmp/cgisess_dc43ad7276188fb45b386135a4b3d5e1 $D = {'_SESSION_ID' => 'dc43ad7276188fb45b386135a4b3d5e1','_SESSION_ATIME' => 1283529349,'name' => 'value','_SESSION_REMOTE_ADDR' => '','_SESSION_CTIME' => 1283529349};;$D [...@unixbox1:~]> env HTTP_COOKIE="CGISESSID=dc43ad7276188fb45b386135a4b3d5e1" ./testutf8 Error instantiating CGI::Session: (in cleanup) Can't locate object method "renewed" via package "Encode::utf8" (perhaps you forgot to load "Encode::utf8"?) at (eval 11) line 1. ... Is this a bug in CGI::Session? [...@unixbox1:~]> perl -MCGI -MCGI::Session -e 'print "CGI: $CGI::VERSION\nCGI::Session: $CGI::Session::VERSION\n"' CGI: 3.15 CGI::Session: 4.20 [...@unixbox1:~]> perl -v | head -2 | tail -1 This is perl, v5.8.8 built for sun4-solaris Todd ##### CGI::Application community mailing list ################ ## ## ## To unsubscribe, or change your message delivery options, ## ## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ## ## ## ## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ## ## Wiki: http://cgiapp.erlbaum.net/ ## ## ## ################################################################
