Hashfile (класс) [3.1.2]

Класс предназначен для работы с хешами, хранящимися на диске. В отличие от класса 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]


User comments:

Larrikin 26.08.2013 01:55

многомерный хешфайл сделать нельзя
http://www.parser.ru/forum/?id=70681


Misha v.3 15.02.2008 00:46

Для хранения в hashfile парсерных системных объектов может быть полезен один из данных классов:
http://www.parser.ru/examples/storage/


In order to add comments you must register.
Copyright © 1997–2021 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 23.02.2011