Существующая схема реализации гостевого доступа имеет один недостаток: скрипт "убивания" использованных гостевых ваучеров запускается раз в минуту на границе минуты. Если у "гостя" ваучер заканчивается, например, на 20-й секунде минуты - его использованный ваучер будет удален только через 40 секунд. На протяжении этих 40 секунд на попытки подключиться человек будет получать отлуп со словами, что его лимит исчерпан.
Для тех случаев, когда перерыв между повторными использованиями гостевого логина вводится специально - эта зедржка несущественна.
Мы же хотели сделать так, чтобы "гость" мог перелогиниться сразу.
Путем ряда экспериментов и общения в аське с Дмитрием был получен нужный результат. Для этого необходимо проделать следующую последовательность действий:
1. Создаем (через web-интерфейс) гостевой тарифный план (как это сделать - есть в инструкции). Выбираем "учет по времени" и задаем нужный номинал в минутах. Цена роли не играет, т.к. не используется. Ограничения по скорости выставляем по желанию. Таймаут можно выставить, хотя я не вижу особого смысла. ID хотспота и график обслуживания - тоже по желанию (работоспособность метода при непустом графике обслуживания я не проверял!). Срок годности задаем любой - он тоже не будет использоваться.
2. Любым инструментом работы с БД заходим в БД в таблицу easyhotspot. Выполняем следующую последовательность команд:
Код: Выделить всё
select value from radgroupcheck where groupname = "Free_Demo_Voucher" and attribute = "Max-All-Session" into @to;
delete from radgroupcheck where groupname = "Free_Demo_Voucher" and attribute in ( "Max-All-Session", "Expire-After" );
insert radgroupreply set groupname = "Free_Demo_Voucher", attribute = "Session-Timeout", op = ":=", value = @to;
При таком описании тарифного плана выполняется только отслеживание времени сессии гостевого ваучера. Время закрытых сессий для этого же ваучера не учитывается.
Я просил Дмитрия реализовать этот механизм в программе (чтобы не нужно было лезть руками в БД) - он ответил, что никому, кроме меня, это не нужно. Но все равно попросил отписаться на форуме
P.S.1. Надеюсь, вы понимаете, что после любого редактирования гостевого тарифного плана через web-интерфейс необходимо снова выполнить всю последовательность действий через админку БД.
P.S.2. Если вы изменили название гостевого тарифного плана в файле /usr/lib/cgi-bin/conf.txt - нужно это же имя тарифного плана указывать и в вышеприведенном коде.