The HTTP protocol used by the internet is by nature a stateless protocol, which means that after an HTTP request is received and a response is generated the process which generated that response is released. When a subsequent request is received from the same client there is no memory of any previous request, so there is no 'state' maintained between requests. This is because a child process generated by the web server is not tied to any particular client, so after dealing with a request from one client it may deal with many requests from many other clients. A subsequent request from the same client may then be given to a different process, so any 'state' maintained by the previous process would be inaccessible.
The PHP language has a standard method to deal with this called sessions whose workings can be summarised as follows:
<session_name>=<session_id>
where:
<session_name>
is the session name. This defaults to PHPSESSID
but can be changed using the session_name() function.<session_id>
is a unique string containing 32 random characters.The $_SESSION superglobal is an associative array, which means that it can hold any number of name=value
pairs. It is also possible for this to be a multi-dimensional array by specifying value
as an array instead of a single value. By using this feature I can maintain a different set of variables for each script in a $script_vars
array, and by writing them to the $_SESSION array as <script_id>=$script_vars
I can keep the session data for each script totally separate from other scripts within the same session.
More information on this topic can be found in Working with a stateless protocol.