|
|
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Что надо делать чтоб @SessionScoped бины уничтожались сразу после закрытия браузера, или всех закладок? Также в web.xml есть такое: Код: xml 1. 2. 3. Тобто все сесии жывут одну минуту? Мне надо чтоб сесии жыли до тех пор, пока хотя одна вкладка приложения открыта, а то сечас если оставить приложение на некоторые время, а потом зделать некоторые действие, то пишет : "View /content/admin/other.xhtml could not be restored." Я так понял из-за того что никаких действий не произходило, то сесия уничтожылась... А она по идее должна работать пока открыто приложение. Как это зделать? Это ведь класическая ситуация авторизации на ресурсе, не понимаю, почему так мало инфы по этому... Ведь каждый кто делал логин, пароль на вход в систему сталкивался с этим... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 13:07:14 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
denis11111Что надо делать чтоб @SessionScoped бины уничтожались сразу после закрытия браузера, или всех закладок? Вы хотите узнать как отключить timeout сессии, но при этом задаёте вопрос, как уничтожать сессию при закрытии браузера. Из далека зашли. denis11111Также в web.xml есть такое: Код: xml 1. В любой доке по сервлетам написано что 0 или -1 должно убирать timeout. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 13:41:31 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
"жИ", "шИ" пиши через "И" - 1-ый класс, наверное. О том, открыта твоя вкладка или закрыта, сервер не знает (если нет постоянного выделенного сокет-соединения). Именно для этого и существует время жизни сессии, которое ты установил в 1 минуту. Если примитивно, то это время от последнего запроса. Соответственно, минутки 2 ничего не делал - сессия на сервере слетела. Не скажу гарантийно именно про сессионные бины, но думаю, что это один-в-один сессионные атрибуты, но последние "уничтожаются" при закрытии браузера, но остаются при закрытии вкладки (хотя опять-таки, не помню точно, там не все совершенно одинаково у всех браузеров). До использования Spring Security этой проблемы тоже коснулся, когда закрытие вкладки не обозначало фактически "отключение юзера от системы", открыл новую - остался на том же месте. Решал тогда это хаком с клиентской стороны - вешал на body событие onbeforeunload="invalidateSession()", POST'ом кидал ajax-запрос на сервер (с rnd-параметром), а на сервере делал session.invalidate(). Жутко некошерно, через одно место, но проверку прошел во всех доступных браузерах нескольких версий, то есть хак работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 13:52:22 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
IDVsbruckДо использования Spring Security этой проблемы тоже коснулся, когда закрытие вкладки не обозначало фактически "отключение юзера от системы", открыл новую - остался на том же месте. Решал тогда это хаком с клиентской стороны - вешал на body событие onbeforeunload="invalidateSession()", POST'ом кидал ajax-запрос на сервер (с rnd-параметром), а на сервере делал session.invalidate(). Жутко некошерно, через одно место, но проверку прошел во всех доступных браузерах нескольких версий, то есть хак работал. Не проще ли было куки настроить, чтобы они не персистелись между сессиями браузера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:05:55 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
IDVsbruck"жИ", "шИ" пиши через "И" - 1-ый класс, наверное. О том, открыта твоя вкладка или закрыта, сервер не знает (если нет постоянного выделенного сокет-соединения). Именно для этого и существует время жизни сессии, которое ты установил в 1 минуту. Если примитивно, то это время от последнего запроса. Соответственно, минутки 2 ничего не делал - сессия на сервере слетела. Не скажу гарантийно именно про сессионные бины, но думаю, что это один-в-один сессионные атрибуты, но последние "уничтожаются" при закрытии браузера, но остаются при закрытии вкладки (хотя опять-таки, не помню точно, там не все совершенно одинаково у всех браузеров). До использования Spring Security этой проблемы тоже коснулся, когда закрытие вкладки не обозначало фактически "отключение юзера от системы", открыл новую - остался на том же месте. Решал тогда это хаком с клиентской стороны - вешал на body событие onbeforeunload="invalidateSession()", POST'ом кидал ajax-запрос на сервер (с rnd-параметром), а на сервере делал session.invalidate(). Жутко некошерно, через одно место, но проверку прошел во всех доступных браузерах нескольких версий, то есть хак работал. Спасибо что все розписал) В рус. языке я пока нуб как и в Джаве. Spring Security иду посмотрю на этот Spring Security. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:17:15 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНе проще ли было куки настроить, чтобы они не персистелись между сессиями браузера? А если эти куки отключат? Тогда все глюкнет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:20:17 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
denis11111BlazkowiczНе проще ли было куки настроить, чтобы они не персистелись между сессиями браузера? А если эти куки отключат? Тогда все глюкнет Это был вопрос к IDVsbruck по поводу того что переоткрытие браузера оставляло клиента в старой сессии. Это возможно только с включенными куками. Другого места для хранения session id между сессиями браузера нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:22:53 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczНе проще ли было куки настроить, чтобы они не персистелись между сессиями браузера? Не все так просто :) Закрытие вкладки браузера не меняет(-ло) JSESSIONID (говорю про ИЕ, сейчас помню только про него) при открытии после другой вкладки. Поэтому и сессия подымается та же. Но и на этот случай у меня был хак :) - при открытии страницы или рефреше в рабочем скрипте генерировал уникальное число, которое передавал на сервер. Пара из JSESSIONID и моего ID и составляли уникальный код. Правда, весь проект был построен на динамических страницах (или на флеш, не помню точно который), поэтому такой "хак" работал. В случае стандартного построения сайта с переходами между страницами, понятно, это уже не работало бы. Но на тот момент "дыру" я закрыл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 14:56:20 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Вам надо тупо сделать timeout сессии 1, и написать javascript, который каждую минуту отсылает легенький ajax-запрос, продляя тем самым сессию. В итоге если закрыть все вкладки - ajax некому будет посылать и сессия благополучно умрет через минуту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 15:02:48 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
IDVsbruckНе все так просто :) Закрытие вкладки браузера не меняет(-ло) JSESSIONID (говорю про ИЕ, сейчас помню только про него) при открытии после другой вкладки. Поэтому и сессия подымается та же. Так в том-то и мой вопрос. Не проще ли настроить куку, чтобы она не персистилась. http://en.wikipedia.org/wiki/HTTP_cookie#Session_cookie Смотри Session cookie и Persistent cookie. Тогда при закрытии страницы, браузер не будет запоминать jsessionid. У вас же по какой-то причине jsessionid сохранялся как Persistent cookie. Т.е. для чего городить большой workaround с JavaScript и серверными хэндлерами, если просто нужно было поменять параметры кук? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 15:13:00 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
забыл никВам надо тупо сделать timeout сессии 1, и написать javascript, который каждую минуту отсылает легенький ajax-запрос, продляя тем самым сессию. В итоге если закрыть все вкладки - ajax некому будет посылать и сессия благополучно умрет через минуту. Неплохо), я тоже так думал. но ещё не проверял. Должно работать в принцыпе. Что-то мне не нравятся все эти костыли хаки и прочее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 15:25:30 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТак в том-то и мой вопрос. Не проще ли настроить куку, чтобы она не персистилась. http://en.wikipedia.org/wiki/HTTP_cookie#Session_cookie Смотри Session cookie и Persistent cookie. Тогда при закрытии страницы, браузер не будет запоминать jsessionid. У вас же по какой-то причине jsessionid сохранялся как Persistent cookie. Т.е. для чего городить большой workaround с JavaScript и серверными хэндлерами, если просто нужно было поменять параметры кук? Ага, понятно. Я этого не знал. В принципе, не знаю и сечас ... просто сейчас такой необходимости нет, но все же интересен механизм их установки (в общем-то, можно не отвечать, могу при необходимости посмотреть - главное, что понятна причина ТЕХ проблем). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 16:24:52 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТ.е. для чего городить большой workaround с JavaScript и серверными хэндлерами, если просто нужно было поменять параметры кук?На втором десятке объяснений, что должен поменять пользователь и как ему сделать это в его браузере - начинаешь ценить server-side решения :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 16:27:50 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Хочется уточнить один нюанс: Зделал я на странице Аякс-запрос к серверу, теперь сесия не уничтожается, что уже хорошо. Но я заметил что-то странное... В меня есть такие анотации: @PostConstruct - метод под этой анотацией срабатывает перед созданием экземпляра класа(сесии) @PreDestroy - Здесь метод срабатывает сразу перед уничтожением сесии. Так вот, метод @PreDestroy зрабатывает полюбому через 1 мин (как и указано в <session-timeout>), и заметте, сесия завдяки Аякс запросу не уничтожается, как я уже писал. Тож в меня есть подозрание что @PreDestroy привязан к параметру <session-timeout>, а не к сомому событию уничтожения сесии. Правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 16:28:45 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovBlazkowiczТ.е. для чего городить большой workaround с JavaScript и серверными хэндлерами, если просто нужно было поменять параметры кук?На втором десятке объяснений, что должен поменять пользователь и как ему сделать это в его браузере - начинаешь ценить server-side решения :) Сервер просит браузер создать печеньки с определенными параметрами. Пользователю ничего объяснять не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 16:54:10 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczСервер просит браузер создать печеньки с определенными параметрами. Пользователю ничего объяснять не нужно.Насколько я понимаю, нигде не расписано, живут http-only куки только в конкретном табе, только в конкретном окне или как-то ещё. Собственно, расписать это и невозможно, т.к. в рамках одной сессии может быть открыто несколько окон, которые браузер волен "переотобразить" на закладки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 20:37:56 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovНасколько я понимаю, нигде не расписано, живут http-only куки только в конкретном табе, только в конкретном окне или как-то ещё. Собственно, расписать это и невозможно, т.к. в рамках одной сессии может быть открыто несколько окон, которые браузер волен "переотобразить" на закладки. Зачем вы HttpOnly сюда приплели? Вопрос только про Session/Persistent, которым сто лет в обед. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2012, 22:06:19 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczВопрос только про Session/Persistent, которым сто лет в обед.Выделено мною:Session cookie A session cookie only lasts for the duration of users using the website. A web browser normally deletes session cookies when it quitsОбъясните мне, глупому, каким образом из этого описания следует, что: 1. Браузер всегда удалит сеансовую куку? 2. Удалит сеансовую куку, если будет закрыто окно/таб "этого сайта", но при этом будут открыты другие окна/табы браузера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2012, 19:24:08 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovBlazkowiczВопрос только про Session/Persistent, которым сто лет в обед.Выделено мною:Session cookie A session cookie only lasts for the duration of users using the website. A web browser normally deletes session cookies when it quitsОбъясните мне, глупому, каким образом из этого описания следует, что: 1. Браузер всегда удалит сеансовую куку? 2. Удалит сеансовую куку, если будет закрыто окно/таб "этого сайта", но при этом будут открыты другие окна/табы браузера? Браузер просто "не сохранит" куку. А не "удалит". По закрытию tab, обычно, куку не имеет смысла удалять. Во-первых если юзер закрывает таб, а не браузер и отрывает новый таб, это почти наверняка тот же самый юзер. Во-вторых табов на один сайт много. "удалять" по закрытию таба никто ничего не будет. Просто когда все табы сайта закрыты, то и найти куку уже негде, т.к. она хранилась только в памяти. Выделать в wikipedia ничего не нужно. Это не официальная документация. Почитайте RFC или ткните носом в то что, например IE6 всегда персистит любые куки не зависимо от параметров. Это будет другой разговор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 11:51:56 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Я, кстати, понял, чем пинг, всё же, лучше чем Session Cookie. Можно раньше заэкспарить сессию. Тогда если злоумышленик перехватит sessionid, то он не сможет ей долго пользоваться. С другой стороны, если атака целенаправленая, то злоумышленик может и сам пинги посылать. На клиенте эта фича легко обнаруживается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 12:14:35 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭто будет другой разговор.Если я закрываю "морскую обезьяну" с несколькими табами - браузер спрашивает сохранять ли ему открытые вкладки. Экспериментировать лень, но вопрос: "А что будет с куками?" - остаётся. P.S. RFC, по большому счёту, такая же википедия. Появилась раньше, формализована лучше, но, в общем и целом, никого ни к чему не обязывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:29:32 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Всё-таки не поленился - зарегистрировался ещё на двух сайтах, закрыл браузер с сохранением открытых вкладок. Посмотрел, что в процессах его нет и запустил заново - авторизованные сессии на всех трёх сайтах никуда не потерялись, действия совершаются без ошибок. Закрыл без сохранения - форум, естественно, попросил предъявить логин и пароль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 17:37:27 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
Так, переводите спор в практическое русло: хочется все-таки определиться, выражаясь примитивно, как делать разделение кук на те, которые должны храниться, и те, от которых хочется избавиться при закрытии табов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 18:24:40 |
|
||
|
@SessionScoped бины
|
|||
|---|---|---|---|
|
#18+
IDVsbruckТак, переводите спор в практическое русло: хочется все-таки определиться, выражаясь примитивно, как делать разделение кук на те, которые должны храниться, и те, от которых хочется избавиться при закрытии табов. 4.2.3 Controlling Caching http://www.ietf.org/rfc/rfc2109.txt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2012, 18:30:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37840088&tid=2131555]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
35ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 315ms |
| total: | 492ms |

| 0 / 0 |
