Cессии

Работа сервера длится 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