Hi Jorge,
Global Variables:
A "Windows" program has one set of globals per user. In other words if 10 people run the program, there are effectively 10 exe's running, and each user has their own globals. What one user does does not affect what another user does.
In the web app, all 10 users are sharing the same exe. So if we just used globals then the things one user did would affect all the other users.
Local Variables:
A windows program opens a procedure, like a browse, and that procedure stays open for the life of the browse. ie for as long as the user can see it.
A web program opens the browse procedure, generates some html, then finishes. On the server the procedure is no longer running, even though the user continues to see it in the browser. If the user then makes some action - like clicking a Next button, a whole new request is sent to the server. A new thread starts, and the browse procedure is called again. One browse can end up running a dozen differet times, on different threads, performing different actions. Local variables would clearly be useless.
SessionValues are the web equivalent of "globals". They exist in scope across calls, and are "bound" to a particular via a SessionId. It doesn't matter if the user is logged in or not.
GetValues however are not really like Local variables. They're more like parameters. They are the values passed with that specific Web Request. They are not persistent. That's why you never _use_ a Value directly. Rather you copy it to the SessionQueue, using p_web.StoreValue, and then use the SessionQueue value.
Cheers
Bruce