&reftitle.examples;
Basic usage As of PHP 4.1.0, $_SESSION is available as a global variable just like $_POST, $_GET, $_REQUEST and so on. Unlike $HTTP_SESSION_VARS, $_SESSION is always global. Therefore, you do not need to use the global keyword for $_SESSION. Please note that this documentation has been changed to use $_SESSION everywhere. You can substitute $HTTP_SESSION_VARS for $_SESSION, if you prefer the former. Also note that you must start your session using session_start before use of $_SESSION becomes available. The keys in the $_SESSION associative array are subject to the same limitations as regular variable names in PHP, i.e. they cannot start with a number and must start with a letter or underscore. For more details see the section on variables in this manual. If register_globals is disabled, only members of the global associative array $_SESSION can be registered as session variables. The restored session variables will only be available in the array $_SESSION. Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for improved security and code readability. With $_SESSION, there is no need to use the session_register, session_unregister, session_is_registered functions. Session variables are accessible like any other variables. Registering a variable with <varname>$_SESSION</varname>. ]]> Unregistering a variable with <varname>$_SESSION</varname> and <link linkend="ini.register-globals">register_globals</link> disabled. ]]> Do NOT unset the whole $_SESSION with unset($_SESSION) as this will disable the registering of session variables through the $_SESSION superglobal. You can't use references in session variables as there is no feasible way to restore a reference to another variable. If register_globals is enabled, then each global variable can be registered as session variable. Upon a restart of a session, these variables will be restored to corresponding global variables. Since PHP must know which global variables are registered as session variables, users need to register variables with session_register function. You can avoid this by simply setting entries in $_SESSION. Before PHP 4.3.0, if you are using $_SESSION and you have disabled register_globals, don't use session_register, session_is_registered or session_unregister. Disabling register_globals is recommended for both security and performance reasons. If register_globals is enabled, then the global variables and the $_SESSION entries will automatically reference the same values which were registered in the prior session instance. However, if the variable is registered by $_SESSION then the global variable is available since the next request. There is a defect in PHP 4.2.3 and earlier. If you register a new session variable by using session_register, the entry in the global scope and the $_SESSION entry will not reference the same value until the next session_start. I.e. a modification to the newly registered global variable will not be reflected by the $_SESSION entry. This has been corrected in PHP 4.3.0.
Passing the Session ID There are two methods to propagate a session id: Cookies URL parameter The session module supports both methods. Cookies are optimal, but because they are not always available, we also provide an alternative way. The second method embeds the session id directly into URLs. PHP is capable of transforming links transparently. Unless you are using PHP 4.2.0 or later, you need to enable it manually when building PHP. Under Unix, pass --enable-trans-sid to configure. If this build option and the run-time option session.use_trans_sid are enabled, relative URIs will be changed to contain the session id automatically. The arg_separator.output &php.ini; directive allows to customize the argument seperator. For full XHTML conformance, specify &amp; there. Alternatively, you can use the constant SID which is defined if the session started. If the client did not send an appropriate session cookie, it has the form session_name=session_id. Otherwise, it expands to an empty string. Thus, you can embed it unconditionally into URLs. The following example demonstrates how to register a variable, and how to link correctly to another page using SID. Counting the number of hits of a single user

Hello visitor, you have seen this page times.

To continue, click here.

]]>
The htmlspecialchars may be used when printing the SID in order to prevent XSS related attacks. Printing the SID, like shown above, is not necessary if --enable-trans-sid was used to compile PHP. Non-relative URLs are assumed to point to external sites and hence don't append the SID, as it would be a security risk to leak the SID to a different server.
Custom Session Handlers To implement database storage, or any other storage method, you will need to use session_set_save_handler to create a set of user-level storage functions.