В моем текущем проекте, для каждой сессии выделяется ресурс. В контексте проекта ресурс, это просто уникальная директория, но количество этих директорий ограничено, так как это просто хоумы для работы экземпляра программы, которая связывается с комплектом оборудования, которое ограничено и на каждую сессию выделяется один комплект целиком. Вобщем объяснять долго, можно просто сказать, что каждая сессия закрепляется за директорией, создавать которые от фонаря я не могу. Вот их 30 штук и все тут.
Это ко всему прочему мой второй сайт, так что делайте на это скидку, если я вдруг начну нести ахинею.
Управление сессиями свое. Все пишется на Tcl через cgi.
Как работает управление сессиями сейчас:
Клиент обращаестя к cgi скрипте на tcl. Скрипт создает индентификатор сессии и на сервере сохраняет файл имя которого ID сессии и в этот файл записывате номер выделенной для этой сессии директории (пока файл пуст, так как директория ещё не выделена). Клиенту скрипт отсылает сгенерированую пустую страницу уже с id (он передается всегда через GET) сессии которая авторефрешится и соответсвенно браузер клиента выполняет запрос уже содержащий id - на этом этапе отрабатывает другой скрипт который уже выделяет ресурс (директорию). Делается это так - скрипт проверяет не записано ли уже имя директории в файл сессии которая требует выделения ресурса, если нет, то выделяет ресурс и вписывает его в файл сессии, а в саму дерикторию кладет файл inuse в который вписывается id сессии, которая использует этот ресурс.
Теперь - зачем такие сложности. Дело в том, что есть такая проблема и таким образом я хотел от неё избавится - типа сессия запросит ресурс несколько раз, но все копии cgi которые запустятся после первой, обнаружат, в файле сессии запись, что ресурс уже выделен и просто завершат работу, что бы не случаслось так, что один клиент с оперой вдруг захватит 4-5 ресурсов и будет использовать только один. На практике все вышло плохо - опера так быстро повторяет свои запросы, что все экземпляры скрипта успевают увидеть пустой файл прежде чем первый запишет туда данные, и в итоге выделяется все-равно несколько ресурсов. Кроме того, когда клиент начнет работать, плучится что выполнив n обращений, он выполнит n дублирующихся передач данных на оборудование. Чего тоже не хотелось бы.
Вобщем-то вопрос - как бороться с этим флудом?