You don't show any code, so we can't reproduce or diagnose your problem. Please post a short, self-contained example that reproduces the problem.
Maybe you don't use a backend for CGI::Session that works across mod_perl instances, or you don't save the values into the session when you think it does, or you don't retrieve the values from the session when you think you do.
Hi, yeah I am aware of the problem of not showing the code but my code is just too big and libraries in multiple file calling each other which make it impossible to summarize the code. So I have to go this way.
But finally I have found the cause. After update the session I have to undef($session) to destroy the session from memory instead of $session->flush() , because calling flush function only write data from memory to file and does not destroy the $session from cache MEMORY, when call CGI::Session->load($sessionId) with another child process, it will load the session that is still cache in memory by modperl that have the old value. So the one that's not updated will overwrite the session db file with the old value.