![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
Привет всем.
тут возник вопрос - с сессиями.. проводил небольшой эксперимент - создавал сервлет в котором в методе service создавал сессию: HttpSession session = request.getSession(); так вот если на стороне клиента отключить поддержку Cookies то при каждом запросе пользователя с данного хоста будет создаваться объект HttpSession - не является ли это потенциальной возможностью перегрузить сервер Resin экземплярами сессий? Ну и что что время сессии можно установить - даже если поставить минимальное значение жизни - 1 минуту - то в течении 1 минуты можно в цикле наплодить столько сессий - что никакой памяти не хватит. Это разумеется лишь предположение - и я, как новичок, буду продолжать исследовать эту область - тем не менее задаю вопрос гуру. |
|||
|
||||
| Tirael |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
Сессия создается для каждого нового клиента. Один раз. Если один и тот же клиент опять заходит на сервер, сессия сохраняется, а не создается новая. Сколько клиентов - столько сессии.
Добавлено @ 21:34
не будет. Создастья только один раз. --------------------
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Хм. По-моему, механизм не совсем такой. Если клиент уходит с сайта, а потом заходит на него ещё раз, то создается новая сессия (возможно, нужен некоторый таймаут, иначе подхватится старая). -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| Tirael |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
Кажется можно указать какой тип сессии создавать: которая исчезает по таймауту, или которая исчезает как только пользователь покинул сайт. --------------------
|
|||
|
||||
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
я просто проверял с помощью листенера HttpSessionListener который реализовывал в своем сервлете.. при каждом запросе к сервлету создавался новый экземпляр сессии - я даже проверял флаг HttpSession.isNew- это происходило при отключенных куках на стороне клиента. Если куки включить - то разумеется сессия будет возвращаться старая...
Таймаут ставил у сессии - 1 минуту.. разумеется все новые уничтожались.. только пока я проводил эксперимент - наплодил объектов около сотни.... а если написать цикл запросов к серверу? что будет? мне кажется это не дыра безопастности а программистский уровень - обеспечить коректное создание сессии.. (могу ошбаться в предположениях..) Добавлено @ 22:02 авообще все эти вопросы возникли совершенно из другой задачи - мне хотелось как то раскопать в библиотеке com.caucho хоть что нить напоминающее менеджер сессий - чтобы из сервлета иметь возможность управлять активными сессиями... уверен что в Резине это есть но это спрятано... например интересный класс Jmx - до сих пор немогу понять как им нормально пользоваться... |
|||
|
||||
| batigoal |
|
||||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
У любой сессии есть таймаут, но это таймаут её уничтожения, когда юзер сидит и ковыряет в носу, глядя на страничку. А вот в немедленном уничтожении сессии после закрытия браузера я не уверен. Надо будет поэкспериметировать.
А как ты делал эти запросы - перезапуском браузера, или как-то по-другому? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
||||
|
|||||
| UnicornMirage |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
насколько я понял при экспериментировании (вариьировании параметра session.setMaxInactiveInterval(int time)) - хотя в спецификации указано что передаваемое значение в секундах - на практике оказывалось в минутах - например при указании параметра равным 1 - сессия существовала минуту неактивности. Меньше задать таймаут не получилось.
1) я в браузере отключил поддержку куков 2) из браузера делал GET запрос к сервлету - причем все время делал refresh страницы - запросы шли одни и те же.. и каждое обращение фиксировалось HttpSessionListener'ом - создавался новый объект HttpSession и у него флаг isNew был true. вообще насколько мне стало ясно когда я пытался разобраться как работает HttpSession - он работает только на основании Cookie - нет куков - сессия создается как будто бы пользователь зашел в первый раз.. есть куки - контейнер сервлетов ищет в своем Map'e сессий уже созданный экземпляр HttpSession по ключу идентификатора сессии... Как бы я хотел получить доступ к этому гипотетическому Map сессий в Resin (кто бы знал! |
||||
|
|||||
| ALKS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 6 Всего: 11 |
сессия уничтожается только по тайм-ауту апп сервер просто не в состоянии узнать что пользователь закрыл браузер. как? реквеста-то об этом не поступит
сесия связыватеься с браузером: запустите оперу, IE а фаерфокс с одной машина на один и тот же сайт - создаться 3 сесии если куки убраны, то нужно обеспечивать то, что в запросе будет присутсвовать почти-параметр JSESSION и вот с этим у автора я полагаю проблеммы. |
|||
|
||||
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
сессия связывается не с браузером а с куком, если взять кук с одного браузера и перенести его на другой - сессия будет та же.
|
|||
|
||||
| Tirael |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 31.1.2006 Где: Москва Репутация: 1 Всего: 7 |
И все равно у меня чувство, что где-то я об этом читал. Впрочем, возможно вы правы. Разберусь завтра. Хм...я всегда думал, что если куки отключены, сессией все таки можно пользоваться. --------------------
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
То есть сессия может отслеживаться только этими двумя способами (JSESSION либо куки)? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| ALKS |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 6 Всего: 11 |
Нет. Сессия связывается с еёной ID. Для простоты: каждый раз когда реквест приходит апп-серверу он обязан сообщить в соответсвии с какой сесией он приперся. если он не сообщит - будет создана новая сесия для него. Нет По умолчанию (ну или в соответствии со спецификацией) сессия может отслеживаться только по JSESSIONID. Но если Cookies включены, то JSESSIONID помещаются в Cookies. Но никто не запрещает вам организовать собственный механизм для отслеживания сесий. А чтобы JSESSIONID при необходимости добавлялось в линк нужно вызвать метод encodeURL класса HttpServletResponse. ну т.е. в простейшем случае, в JSP все линки нужно обработать примерно так:
encodeURL сам решит когда нужно параметр в линк пихать а когда нет Это сообщение отредактировал(а) ALKS - 8.5.2006, 11:31 |
||||
|
|||||
| ALKS |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 6 Всего: 11 |
Да ну вас право Весьма вероятно есть и другие пути (например java-апплет или ActiveX но я не в том ни в другом почти ничего не понимаю, так что не ругайтесь сильно). В любом случае никто в здравом уме таким извратом страдать не будет |
||||
|
|||||
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
вот спасибо, не знал этого хороший метод! супер! можно дублировать JSESSIONID как в куках, так и в параметрах GET-запроса.. cскажите, а получающаяся ссылка в результате вызова метода response.encodeURL содержит добавленную строку jsessionid=xxxxxxxxxxxxxxxx через разделитель ' ; ' - это специфический разделитель, используемый для сервлетов? либо это какой то стандартный разделитель в GET- запросах? Это сообщение отредактировал(а) UnicornMirage - 8.5.2006, 14:36 |
|||
|
||||
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: нет Всего: 1 |
и всё таки это можно обойти - вначале вопроса я имел ввиду возможность организации DOS атаки.. предположим пользователь намеренно отключит куки - возьмет GET-запрос и исключит из него jsessionid. будет посылать серверу этот запрос в цикле а тот будет создавать все новые и новые HttpSessions.
что нужно сделать в сервлете чтобы не плодить объекты HttpSession? Это сообщение отредактировал(а) UnicornMirage - 8.5.2006, 14:50 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |