Вероятно, Вы отстаете на попытке получить и проверить обратный DNS соединяющегося хоста. Можно протестировать это путем включения skip_name_resolve
в my.cnf сервера, [mysqld]
раздел.
Если это на самом деле имеет место (продемонстрированный тем параметром, устраняющим задержку), то можно решить проблему любой установкой DNS правильно (вперед и реверс) для клиента, или путем выполнения с skip_name_resolve
все время (что означает, Вы не можете использовать имена хостов в Вашем GRANT
таблицы).
Конечно. Я делаю то же самое.
Когда пользователь входит в систему, я даю им cookie и создаю маркер в /t/
tokenid, и помещенный это в cookie: S=
tokenid;PATH=/
Затем я могу использовать RewriteCond
проверять на существование файла:
RewriteEngine on
# check for no cookie being set
RewriteCond %{HTTP:Cookie} !S=([a-zA-Z0-9]+)
RewriteRule ^/*protected/ /login.html [L,R]
# check for an invalid cookie being set
RewriteCond %{HTTP:Cookie} S=([a-zA-Z0-9]+)
RewriteCond /t/%1 !-f
RewriteRule ^/*protected/ /login.html [L,R]
Наконец, сборщик "мусора" периодически работает и удаляет старые маркеры:
find /t -type f \! -atime +1 -delete
Чтобы заставить atime автоматически обновить, я имею /t
смонтированный без noatime
, и у меня есть он доступный для сети (но не индексированный) и часть ссылок таблицы стилей /loggedin.txt
который переписывается как:
RewriteCond %{HTTP:Cookie} S=([a-zA-Z0-9]+)
RewriteRule ^/*loggedin\.txt$ /t/%1 [L]