in reply to session parameter lost

$session_id eq '$SESSIONID'

What are you intending to do with that comparison? Single quotes don't interpolate, so you are comparing with the literal value $SESSIONID, not with the contents of a variable.

Maybe some fearless monk can find other problems with your code that prevent it form working, but if I were to debug it, I'd need a self-contained script that I can run and reproduce the problem with. So, please provide that.

With a bit of luck, the process of producing a minimal example even makes it obvious what's wrong.

Oh, and finally: What's the reason for using local our all over the place? Lexical variables with my are fine, and avoid some hard-to-debug problems.