Сессия создаёт файл во временном каталоге на сервере, в котором хранятся зарегистрированные переменные сессии и их значения. Эти данные будут доступны для всех страниц сайта во время этого посещения.
Расположение временного файла можно узнать через настройки в файле php.ini, который содержит параметр session.save_path. Как правило, папка имеет имя tmp.
При открытии сессии создаётся уникальный идентификатор для этой конкретной сессии, который представляет собой случайную строку из 32 шестнадцатеричных чисел.
Файл-куки PHPSESSID автоматически сохраняется на компьютере пользователя для хранения уникальной строки идентификации сессии.
На сервере в указанном временном каталоге автоматически создаётся файл, который содержит имя уникального идентификатора с префиксом sess_.
Когда PHP-скрипт хочет получить значение из переменной сессии, PHP автоматически получает уникальную строку идентификатора сессии из файла cookie PHPSESSID, а затем ищет во временном каталоге файл с этим именем и выполняет проверку путём сравнения обоих значений.
Сессия заканчивается, когда пользователь закрывает браузер или покидает сайт, сервер завершает сессию по истечении заданного периода времени, обычно 30 минут.
Сессия PHP открывается с помощью функции session_start(). Эта функция сначала проверяет открытые сессии, если ни одна сессия не открыта, запускает ее. Рекомендуется поместить вызов session_start() в начало страницы. Переменные сеанса хранятся в суперглобальном ассоциативном массиве $_SESSION[]. Доступ к этим переменным можно получить во время сессии.
Код для примера. Сначала откроем сессию, затем зарегистрируем переменную с именем visit, которая увеличивается каждый раз, когда страница посещается во время сеанса. Используйте функцию isset(), чтобы проверить, установлена ли уже переменная сессии или нет.
<?php
session_start();
if( isset( $_SESSION['visit'] ) ) {
$_SESSION['visit'] += 1;
}else {
$_SESSION['visit'] = 1;
}
$msg = "Вы посещали эту страницу ". $_SESSION['visit'];
$msg .= " в текущей сессии.";
?>
<html>
<head>
<title>Session</title>
</head>
<body>
<?php echo ( $msg ); ?>
</body>
</html>
Результат. Можете перезагрузить страницу, чтобы увидеть работу счётчика.
Вы посещали эту страницу 1 в текущей сессии.
Вы можете открыть страницу в другой вкладке, но счётчик "узнает" вас и будет увеличиваться. Вы можете закрыть все вкладки и через некоторое время открыть страницу снова. Счётчик по-прежнему работает и не сбрасывается.
Узнать идентификатор сессии можно через функцию session_id().
echo session_id();
e7d0810c42d47af94f31ed4a2837c730
Интересно, что через эту же функцию с одним аргументом, который принимает идентификатор сессии, можно заменить идентификатор, который генерирует система. Но в этом случае функцию следует использовать до session_start().
session_id(YOUR_SESSION_ID);
session_start();
Также можно сохранять не одно значение, а целый массив.
$cats = array("Барсик", "Мурзик", "Рыжик");
$_SESSION['cats'] = $cats;
Выводим массив на страницу.
Барсик, Мурзик, Рыжик
<?php echo ($_SESSION['cats'][0].', '.$_SESSION['cats'][1].', '.$_SESSION['cats'][2]); ?>
Сессия может быть удалена с помощью функции session_destroy(). Через один вызов можно удалить все переменные сеанса. Если вы хотите удалить одну переменную сессии, вы можете использовать функцию unset(), чтобы отключить ее. Ниже приводится пример, в котором отменяется одна переменная:
<?php
unset($_SESSION['visit']);
?>
Вызов, который удаляет все переменные сессии:
<?php
session_destroy();
?>
Вам не нужно вызывать функцию start_session(), чтобы открыть сессию, при посещении пользователем сайта, если вы установите переменную session.auto_start в файле php.ini.
Пользователь может запретить хранить файлы cookie на своем компьютере. Поэтому существует другой способ отправки идентификатора сеанса в браузер. Вы можете использовать константу SID, которая определяется, если сеанс запущен. Если клиент не отправил соответствующий сессии файл cookie, она выглядит как session_name = session_id. В противном случае она расширяется до пустой строки. Таким образом, вы можете вставлять ее в URL-адреса. В следующем примере показано как правильно регистрировать переменную и как правильно ссылаться на другую страницу с использованием SID.
<?php
session_start();
if (isset($_SESSION['visit'])) {
$_SESSION['visit'] = 1;
}else {
$_SESSION['visit']++;
}
$msg = "Вы посещали эту страницу ". $_SESSION['visit'];
$msg .= " в текущей сессии.";
echo ( $msg );
?>
<p>To continue click following link <br />
<a href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>
Этот код сформирует ссылку, на которую можно щёлкнуть.
Данные запоминаются, нужно только извлекать нужные значения.
$_SESSION['username'] = "Васька";
<p><b>
<?php echo 'Привет, '.$_SESSION['username']."<br>"; ?>
</b></p>
<p><a href="session2.php">На следующую страницу </a></p>
Привет, Васька
Нажмите на ссылку выше, чтобы увидеть, как работает сессия между страницами.