Hi,

I think I also need to detail more about the problem i met with %udat using Apache::Session::File before jump to Apache::Session::DBI because the latter might also expose the same 'unsync %udat' problem.

Let me use these script segments to describe the odd output i met using %udat with Apache::Session::File:

script#1:
...
[+ $udat{any} +]
[- $udat{any}=99 -]
...display a form with action='script#2'
...

script#2:

...before here, $udat{any} should be 99 ...
delete $udat{any};
$req_rec->header_out(Location=>'script#1');  (please ignore # here)
$req_rec->status(REDIRECT);
exit;

My Embperl is 1.2b9.
My Apache::Session is 1.02.

The odd i saw is:

'Sometimes' the script#1 wrongly displays 99 when the form in script#1 is submitted. But it should display a empty string. The error rate is about 50%. So I guess it is a problem of race condition, something like this (i guess): Before %udat is saved to FileStore, shortly after the httpd serving script#2 sends HTTP Location header to browser and request back to run script1, the new request to run script#1 is served by another httpd and this second httpd is forked before the first httpd exits. The Session module in 2nd httpd fetchs the wrong 'obsoleted' version of %udat because the new %udat is not yet saved in time by 1-st httpd's Session module.

I guess it's kind of race condition because if I remove the location redirection code and manually fetch script#1 immediately after script#2 ends, everything is OK all the time. But that makes my web page very unfriendly and unacceptable. In my web, I heavily use %udat and redirection to pass big fields among scripts of the same session.

I have no time to wait for patch (if any). Is there any method I can call to "sync" %udat before I call $req_rec->status(REDIRECT)? I think this is the fastest remedy to me.

Looking forward to any advance on this. Hoping my problem description here is clear enough.

Thanks.

Huang-Ming

[EMAIL PROTECTED] ¼g¹D¡G

 
Hi,

Thanks to Embperl I almost done my web. But then I found serious abnormality on session handling (%udat) when used with HTTP redirection (ie. $req_rec->status(REDIRECT)). Sometimes %udat works OK, sometimes it still remains old data, especially after redirection is processed by another httpd. (race condition?)

I'm tired of Apache::Session::FIle. Besides I need to use %mdat as well. So as advised I turn to Apache::Session::DBI. But it is worse. The first access of %udat caused httpd to crash with panic message as follows:

[183] SES: Embperl Session Management enabled (1.xx)
panic restartop
panic: POPSTACK
Callback called exit.
Callback called exit.

What's wrong?

I'm using Embperl 1.2b9 and Apache::Session 1.02.

My httpd.conf looks like:

#...(my old setting)...
#PerlSetEnv  EMBPERL_SESSION_CLASSES "FileStore SysVSemaphoreLocker"
#PerlSetEnv  EMBPERL_SESSION_ARGS "Directory=/tmp"
#PerlModule  Apache::Session::File

#...new setting...it never works but panic...
PerlSetEnv  EMBPERL_SESSION_CLASSES "DBIStore SysVSemaphoreLocker"
PerlSetEnv  EMBPERL_SESSION_ARGS "DataSource=DBI:mysql:mydb UserName=panpipi Password=helpme"
PerlModule  Apache::Session::DBI (Apache::Session neither works)

#...this neither works. why?...
PerlSetEnv EMBPERL_COOKIE_DOMAIN ".myxxx.com"
PerlSetEnv EMBPERL_COOKIE_PATH "/"
PerlSetEnv EMBPERL_COOKIE_EXPIRES "+1Y"

What do I need to do with my database to work with Apache::Session? I mean what tables or database schema are necessary for this session handling to work?

PS. Besides, what's CVS version?

Huang-Ming
 

Reply via email to