I tried testing your code, but I couldn't for the life me get CGI::Session working - however, I did get CGI::kSession working, and I pasted some code below. From what I can tell, your logic works and is good, and I would therefore assume that the issue lies in the module's usage. You might want to check this one out - it's clean an simple... (haven't looked at the actual .pm code, though...)
#!/usr/local/bin/perl
use strict;
use CGI;
use CGI::kSession;
my $cgi = new CGI;
print $cgi->header;
print $cgi->start_html();
my $s = new CGI::kSession(lifetime=>10,path=>"/tmp/",id=>'test');
$s->start();
$s->register("name") unless $s->is_registered("name");
$s->register("age") unless $s->is_registered("age");
if ($cgi->param("name")) {
$s->set("name", $cgi->param("name"));
$s->set("age", $cgi->param("age"));
&add_age();
} elsif ($cgi->param('test')) {
&add_age();
} else {
print $cgi->start_form,
"Name: ",
$cgi->textfield("name"),
"Age: ",
$cgi->textfield("age"),
$cgi->p,
$cgi->submit('Next'), " ",
$cgi->defaults("Clear"),
$cgi->end_form;
}
print $cgi->end_html();
sub add_age {
my $age = $s->get("age");
my $name = $s->get("name");
$age++;
print $name, "\'s new age is $age";
$s->set("age", $age);
#$s->set("name", $name);
print $cgi->start_form,
$cgi->hidden(-name=>'test', -value=>'test'),
$cgi->submit('Next'),
$cgi->end_form;
}
1;