setMaxInactiveInterval на OC4J не является точным - PullRequest
1 голос
/ 24 января 2012

У меня приложение сервлета развернуто в стороне oc4j.

Я пытаюсь сделать недействительным сеанс пользователя через 1 минуту, используя:

session.setMaxInactiveInterval(1 * 60);

Но что происходит, так это то, что пройдет около 1 минуты (и может достигнуть 1 минуты и половины), прежде чем сеанс будет уничтожен.

Это проблема реализации или что?

1 Ответ

1 голос
/ 24 января 2012

Вы, кажется, проверяете уничтожение, ожидая, пока не будет вызван HttpSessionListener#sessionDestoryed(), вместо того, чтобы фактически отправить HTTP-запрос на сервер через ровно 1 минуту.

Уничтожение сеанса происходит на большинстве серверов, управляемых фоновым заданием, которое выполняется с интервалами, которые могут составлять каждую минуту или более в зависимости от марки / версии сервера, конфигурации и, возможно, также загрузки. Это задание проверяет все открытые сеансы, истек ли он или нет, и соответствующим образом удаляет просроченные. Таким образом, неверно, что уничтожение сеанса немедленно вызывается в ту же секунду, когда истек срок сеанса, пока клиент не отправил запрос. Это фоновое задание выполняется не каждую секунду, оно было бы слишком загруженным процессором.

Однако уничтожение сеанса будет немедленно вызываться всякий раз, когда сервер получает запрос с идентификатором сеанса, пока сеанс все еще присутствует в памяти сервера, но срок его действия истек.

Итак, вам придется либо принять его, либо изменить свою методологию тестирования.

...