Cессии
Primary tabs
Работа сервера длится 0.001 секунды. Когда браузер заходит на сервер соединение открывается и закрывается сразу. Сессия - это механизм позволяющий хранить данные между запусками сценария.
данные, которые записываются: Имя клиента/номер счета/содержимое виртуальной машины.
Codeigniter - массив параметров в сессии - session, получить список, записать значение:
http://fkn.ktu10.com/?q=node/7352
WEB - технологии ФКН ВГУ некоторые вопросы и ответы (весьма много)))
Механизм работы сессии:
1 присвоение клиенту так называемого уникального идентификатора сессии, Session ID;
2идентификатор был доступен при каждом запуске сценария, PHP помещает его в cookies браузера;
3. Поместив в него некоторыеданные, мы можем быть уверены, что при следующем запуске сценария тем же пользователем массив $_SESSION получит то же самое значение, которое было у него при предыдущем завершении программы
Инициализация сессии
bool session_start([ array $options = [] ])
В php.ini не ставить режим session.auto_start=1
Пример использования сессии
// Пример работы с сессиями. Файл count.php
session_start();
// Если на сайт только-только зашли, обнуляем счетчик
if (!isset($_SESSION['count']))
$_SESSION['count'] = 0;
// Увеличиваем счетчик в сессии
$_SESSION['count'] = $_SESSION['count'] + 1;
?>
Счетчик
В текущей сессии работы с браузером Вы открыли эту страницу
= $_SESSION['count'] ?> раз(а).
Закройте браузер, чтобы обнулить счетчик.
Открыть дочернее окно браузера
Уничтожение сессии
// Пример работы с сессиями. Файл count.php
session_start();
// Если на сайт только-только зашли, обнуляем счетчик
if (!isset($_SESSION['count']))
$_SESSION['count'] = 0;
// Увеличиваем счетчик в сессии
$_SESSION['count'] = $_SESSION['count'] + 1;
$_SESSION = []; // Удалить cookie, соответствующую SID
unset($_COOKIE[session_name()]);
// Уничтожить хранилище сессии
session_destroy();
?>
Счетчик
В текущей сессии работы с браузером Вы открыли эту страницу
= $_SESSION['count'] ?> раз(а).
Закройте браузер, чтобы обнулить счетчик.
Открыть дочернее окно браузера
Идентификатор сессии и имя группы
На одном и том же сайте могут сосуществовать сразу несколько сценариев, которые нуждаются в услугах поддержки сессий PHP. Они "ничего не знают" друг о друге, поэтому временные хранилища для сессий должны выбираться не только на основе идентификатора пользователя, но и на основе того, какой из сценариев запросил обслуживание сессии
PHP будет исполь- зовать имя по умолчанию — PHPSESSID
session_start(['session.name' => 'PHPSESSID']);
Идентификатор сессии
идентификатор сессии (SID)
Фактически, вызвав session_id() до session_start(), мы можем подключиться к любой (в том числе и к "чужой") сессии на сервере, если знаем ее идентификатор.
string session_id([string $sid])
Путь к временному каталогу
string session_save_path([string $path])
Стоит ли изменять группу сессий?
$_SESSION['is_authorized'] = true
Если данные допустимы, сценарий записывает в сессии признак успешной авторизации:
$_SESSION['is_authorized'] = true
$auth_session['is_authorized'] = true;
$forum_session =& $_SESSION['forum_subsystem']; $auth_session =& $_SESSION['auth_subsystem']; $auth_session['count'] = $auth_session['count'] + 1;
Установка обработчиков сессии
bool handler_open(string $save_path, string $session_name)
bool handler_close()
string handler_read(string $sid)
//записи данных сессии с идентификатором $sid во временное хранилище, например, открытое ранее обработчиком handler_open()
string handler_write(string $sid, string $data)
bool handler_destroy(string $sid)
bool handler_gc(int $maxlifetime)
Регистрация обработчиков
void session_set_save_handler($open, $close, $read, $write, $destroy, $gc)
Эту функцию можно вызывать только до инициализации сессии (до session_start()), в противном случае она просто игнорируется
переопределение обработчиков
<?php
// Переопределение обработчиков сессии. Файл handlers.php
// Возвращает полное имя файла временного хранилища сессии.
// В случае, если нужно изменить тот каталог, в котором должны
// храниться сессии, достаточно поменять только эту функцию
function ses_fname($key)
{
return dirname(__FILE__)."/sessiondata/".session_name()."/$key";
}
// Заглушки - эти функции просто ничего не делают
function ses_open($save_path, $ses_name)
{
return true;
}
function ses_close()
{
return true;
}
// Чтение данных из временного хранилища
function ses_read($key)
{
// Получаем имя файла и открываем файл
$fname = ses_fname($key);
return @file_get_contents($fname);
}
// Запись данных сессии во временное хранилище
function ses_write($key, $val)
{
$fname = ses_fname($key);
// Сначала создаем все каталоги (в случае, если они уже есть,
// игнорируем сообщения об ошибке)
@mkdir(dirname(dirname($fname)), 0777);
@mkdir(dirname($fname), 0777);
// Создаем файл и записываем в него данные сессии
@file_put_contents($fname, $val);
return true;
}
// Вызывается при уничтожении сессии
function ses_destroy($key)
{
return @unlink(ses_fname($key));
}
// Сборка мусора - ищем все старые файлы и удаляем их
function ses_gc($maxlifetime)
{
$dir = ses_fname(".");
// Получаем доступ к каталогу текущей группы сессии
foreach (glob("$dir/*") as $fname)
{
// Файл слишком старый?
if (time() - filemtime($fname) >= $maxlifetime)
{
@unlink($fname);
continue;
}
}
// Если каталог не пуст, он не удалится - будет предупреждение.
// Мы его подавляем. Если же пуст - удалится, что нам и нужно.
@rmdir($dir);
return true;
}
// Регистрируем наши новые обработчики
session_set_save_handler( "ses_open",
"ses_close",
"ses_read",
"ses_write",
"ses_destroy",
"ses_gc");
// Для примера подключаемся к группе сессий test
session_name("test1");
session_start();
// Увеличиваем счетчик в сессии
$_SESSION['count'] = @$_SESSION['count'] + 1;
?>
<h2>
Счетчик
</h2>
В текущей сессии работы с браузером Вы открыли эту страницу
<?=$_SESSION['count']?> раз(а).<br />
Закройте браузер, чтобы обнулить счетчик.<br />
<a href="<?=$_SERVER['SCRIPT_NAME']?>" target="_blank">
Открыть дочернее окно браузера
</a>.
Полезные ссылки:
1 WEB - технологии ФКН ВГУ некоторые вопросы и ответы (весьма много)))
http://fkn.ktu10.com/?q=node/2408
2 php Механизм записи/хранения/удаления данных о сессии. Разница между unset($_COOKIE) и session_destroy() http://fkn.ktu10.com/?q=node/10099
3 Интервью с создателем PHP
http://fkn.ktu10.com/?q=node/4847
4 php Как работают сессии -- использование куков
http://fkn.ktu10.com/?q=node/8256
5 сессии и куки какая разница
http://fkn.ktu10.com/?q=node/2996
6 php Как работают сессии -- использование куков
http://fkn.ktu10.com/?q=node/8256
7 #2 Практическое задание №2 -- Добавляем ещё одно поле в модель статьи
http://fkn.ktu10.com/?q=node/9897
8 Односессионные куки сохраняются после закрытие браузера и хранение истории (вопрос по сессиям php)
http://fkn.ktu10.com/?q=node/10095
- Log in to post comments
- 1661 reads