Класс hashfile

Предназначен для работы с хешами, хранящимися на диске.

Краткое описание

В отличие от класса hash, объекты данного класса считаются всегда определенными (def) и не имеют числового значения.

Если класс hash хранит свои данные в оперативной памяти, hashfile хранит их на диске, причем можно отдельно задавать время хранения каждой пары «ключ / значение».

Для хранения данных hashfile используются два файла — с расширением .dir и .pag.

существует ограничение на длину строк ключа и значения, в сумме они не должны превышать 8 000 байт.

Чтение и запись данных происходят очень быстро: идет работа только с необходимыми фрагментами файлов данных. На простых задачах hashfile работает значительно быстрее баз данных.

В один момент времени файл может изменяться только одним скриптом, остальные ждут окончания его работы.

Пример

Допустим, желательно некоторую информацию получить от посетителя на одной странице сайта и иметь возможность отобразить ее на другой странице сайта. Причем необходимо, чтобы посетитель не мог ее ни увидеть, ни подделать.

Можно поместить информацию в hashfile, ассоциировав ее со случайной строкой — идентификатором «сеанса общения с посетителем». Идентификатор сеанса общения можно поместить в cookie, данные теперь хранятся на сервере, не видны посетителю и не могут быть им подделаны.

# создаем/открываем файл с информацией
$sessions[^hashfile::open[/sessions]]
^if(!def $cookie:sid){
	$cookie:sid[^math:uuid[]]
}
# после этого…

$information_string[произвольное значение]
# запоминаем произвольную $information_string под ключом sid на 2 дня
$sid[$cookie:sid]
$sessions.$sid[
	$.value[$information_string]
	$.expires(2)
]

# а так можем считать сохраненное ранее значение
# если с момента сохранения прошло меньше 2 дней
$sid[$cookie:sid]
$information_string[$sessions.$sid]