8.6.1 Problem
8.6.2 Solution
Use the session
module. The session_start( ) function initializes a session, and
accessing an element in the global $_SESSION array tells PHP to keep track of the corresponding variable.
session_start(); $_SESSION['visits']++; print 'You have visited here '.$_SESSION['visits'].' times.';
8.6.3 Discussion
To start a session automatically on each request, set
session.auto_start to 1 in php.ini. With session.auto_start, there's no
need to call session_start( ).
The session functions keep track of users by issuing them cookies with a randomly generated session IDs. If PHP detects that a user doesn't accept the
session ID cookie, it automatically adds the session ID to URLs and forms.[1] For example, consider
this code that prints a URL:
[1] Before PHP 4.2.0, this behavior had to be explicitly enabled by building PHP with the --enable-trans-sid configuration setting.
print '<a href="train.php">Take the A Train</a>';
If sessions are enabled, but a user doesn't accept cookies,
what's sent to the browser is something like:
<a href="train.php?PHPSESSID=2eb89f3344520d11969a79aea6bd2fdd">Take the A Train</a>
In this example, the session name is PHPSESSID and the
session ID is 2eb89f3344520d11969a79aea6bd2fdd. PHP adds those to the
URL so they are passed along to the next page. Forms are modified to include a
hidden element that passes the session ID. Redirects with the Location
header aren't automatically modified, so you have to add a session ID to them
yourself using the SID constant:
$redirect_url = 'http://www.example.com/airplane.php';
if (defined('SID') && (! isset($_COOKIE[session_name()]))) {
$redirect_url .= '?' . SID;
}
header("Location: $redirect_url");
The session_name( ) function returns the name of the cookie that the session ID
is stored in, so this code appends the SID constant only to
$redirect_url if the constant is defined, and the session cookie isn't
set.
By default, PHP stores session data in files in the /tmp directory on your server.
Each session is stored in its own file. To change the directory in which the
files are saved, set the session.save_path configuration directive in
php.ini to the new directory. You can also call
session_save_path( ) with the new directory to
change directories, but you need to do this before accessing any session
variables.