hashfile (класс)

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

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

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

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

Чтение и запись данных происходят очень быстро: идет работа только с необходимыми фрагментами файлов данных. На простых задачах
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]


Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 25.09.2024