Sergey Brutsky wrote:
> I've changed my code in agree to your code, it doesn't work.
>
> I think that problem, probably, in initializing session instance.
> It initializes in two steps: creating session instance and then
> reinitializing session (reading CGISESSID and creating session file).
> It seems that my getInstance() method returns "half-initialized" session
> object.
> I mean to use condition "defined $session" is not enough.
> getInstance() should initialize sesssion, reinitialize and only after
> that returns instance.
Sergey,
It's frustrating that you haven't followed up on the advice given to you
of writing some tests. Here are some tests I wrote for the case. Do they
pass for you when you run these tests in a file?
If they do, your problem is elsewhere, or you need to write a new test
to share with us that illustrates your problem. If the tests don't pass,
check that you are using the latest version of CGI::Session.
Finally, consider using CGI::Application and
CGI::Application::Plugin::Session instead! They are a lightweight,
proven solution to provide a singleton for a CGI::Session object.
Mark
--
http://mark.stosberg.com/
#!/usr/bin/perl
package SessionSingleton;
my $session;
sub getInstance
{
defined $session or $session = CGI::Session->new();
return $session;
}
use Test::More 'no_plan';
use CGI::Session;
my $session1;
is($session1,undef, "session starts out undef");
$session1 = SessionSingleton->getInstance;
ok($session1, "session is true after getInstance");
my $sid = $session->id;
$session2 = SessionSingleton->getInstance;
is($sid,$session2->id,
"multiple call to getInstance return the same session ID");
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
|