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
- 1064 reads