Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Подскажите как грамотно обработать таймаут сессии. Приложение довольно навороченное на фреймах, с использованием MVC. После долгого простоя отправляю постбэк, а код лезет за переменной сессии и естественно её там уже нет. Вобщем интересует больше стратегия "как это делается", чем строчки кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 16:09 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Если я Вас правильно понял, то Вам нужен параметр файла web.config Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 20:49 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Незнаю, на сколько это верно, но, умные головы говорят - если тайм-ут сессии, предположим 20 мин - то можно вызывать рефреш страницы каждые 10 мин - сессия будет жить вечно, пока насильно её не закончишь... Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 21:30 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
vladgrigНезнаю, на сколько это верно, но, умные головы говорят - если тайм-ут сессии, предположим 20 мин - то можно вызывать рефреш страницы каждые 10 мин - сессия будет жить вечно, пока насильно её не закончишь... Целиком и всеобъемльюще согласен, поддерживаю. Однако, здесь, на мой взгляд, имеет смысл рассмотреть уже политику безопасности. ЗЫ да, кстате Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 22:37 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Просто ЛосьЕсли я Вас правильно понял, то Вам нужен параметр файла web.config Нет. У приложения уйма форм, мне что в каждый обработчик Load вставлять код проверки истечения сессии и перебрасывать клиента на стандартную страничку с отображением диалога мол сессия истекла требуется повторить вход. Либо наследовать класс от Page, там определить необходимую логику и наследовать все страницы от него. Как правильно, как умные люди делают? Потдерживать сессию не нужно иначе смысл от неё? Сервер должен освободить ресурсы, если клиент сорвался с места и пошёл с девушкой в ресторан... Ребят, код рисовать не надо, мне словами, как это делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 23:49 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Orion, а как Вы себе это представляете? Cессия либо есть, либо ее нет. У сессии есть timeout, либо он истек, и сессии нет, либо он не истек, и сессия есть. Возможно также мы не поняли друг друга. Попробуйте в Global.asax.vb описать событие Session_End, возможно Вам нужно это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 00:05 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Допустим, я сессию закрыл по событию, дальше... Пользователь пришёл со свидания и жмёт кнопарь на форме, генерируется постбэк... Внутри страницы код лезет в ((MyClass)Session["ключ"]).MyFunc(); Опа... пустая ссылка на объект - исключение. Результат - пользователь имеет плохое мнение о приложении видя исключение вместо сообщение о том что он слишком долго гулял и сервер закрыл его сессию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 00:15 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
2Orion не понятно, какой эффект требуется получить что бы не было исключения, переменную сессии предварительно можно(вообщето нужно) проверять на null данные каждого пользователя можно кэшировать в базе, и при пустых переменных сессии восстанавливать из базы одним словом, вариантов может быть много, осталось выяснить - что конкретно необходимо.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 00:58 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
<OFF> Необходимо как всегда: "интелект компа" -ты ему говоришь, что пошёл в ресторан (больше чем на тайм-аут сессии) - он отвечает - "угу" - и продолжает ждать, поддерживая сессию, пока ты не вернёшься из ресторана... P.S. Подождите лет 150 - получите интелектуальные машины ;) и, таких проблем не будет... </OFF> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:06 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
profil2Orion не понятно, какой эффект требуется получить что бы не было исключения, переменную сессии предварительно можно(вообщето нужно) проверять на null Наверное я плохо объясняю. Либо есть решение до неприличия простое. Негоже на каждой странице вставлять один и тотже код. Я пока склоняюсь к написанию HttpModule для конвейера, чтобы ещё до страницы с формой отваживать юзера на прощальное сообщение. Но чувствую что что-то не то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:28 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
2vladgrig Мне НЕ НАДО поддерживать сессию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:30 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
авторМне НЕ НАДО поддерживать сессию Тогда вообще непонятно в чём грабли - есть блок Try..Catch..End Try (VB.NET к примеру)... Вот и оберни все свои постбэки этими блоками - отлавливай ошибку о пустом значении в переменной сессии и отправляй на страницу авторизации или там на страницу об извещении о конце сессии... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:43 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Ну вобщем пришли к тому, что есть 2 варианта: 1. ставим контроль состояния сессии где-то на этапах инициализации каждой страницы 2. Перехватываем запрос модулем ещё до того как он добрался до страницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:51 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
авторНу вобщем пришли к тому, что есть 2 варианта: 1. ставим контроль состояния сессии где-то на этапах инициализации каждой страницы 2. Перехватываем запрос модулем ещё до того как он добрался до страницы Нуу... Если Вы считаете, что это самое ГРАМОТНОЕ решение... Советую, кстати, где-то на этапах инициализации каждой страницы поставить проверку наличия соединения с SQL и ряда других непредвиденных ошибок... А то, выпрыгнет подобная ошибка - и, результат - пользователь имеет плохое мнение о приложении видя исключение сервера... Есть же специальные средства обработок ошибок, вот ими и надо обрабатывать - чего самим выписывать всё по новой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 13:56 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Here is my way to solve the problem. I have class Base page (clsBasePage). All pages in project inherit from clsBasePage. Where is not necessary to check anything on each page, it is enough to do it ones in clsBasePage but as each page inherits from clsBasePage. What is major idea. About timeout. According to many articles I've been reading 1.0 ver has bug in that timeout mechanism and I've decided do not use session timeout at all. One my page in main frameset has following screept: <script> setTimeout('document.location=document.location' ,300000); </script> The page will be reloaded ones per 3 min. I let user to make a decision when she/he is going to logout. Thanks, Vladimir ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 23:14 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
vladgrig Нуу... Если Вы считаете, что это самое ГРАМОТНОЕ решение... Советую, кстати, где-то на этапах инициализации каждой страницы поставить проверку наличия соединения с SQL и ряда других непредвиденных ошибок... Ну зачем так утрировать? У вас есть предложение лучше или вы просто так написали? vladgrigЕсть же специальные средства обработок ошибок Например, я знаю, что есть решения, я затем и создал этот топик, чтобы мне на них указали. Вот IAmSam тоже считает, что можно ещё наследовать от собственного класса страницы, я как-то и забыл включить это как третий способ. А чем вам не нравится второй вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 00:40 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
авторА чем вам не нравится второй вариант? Лучше Вы мне объясните, чем Вам не нравиться вариант Try Catch End Try? Рассейте мои заблуждения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 07:46 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
По моему скромному IMHO, если уж так заботится о положительном впечатлении юзера от приложения, то надо пересмотреть сам подход к кешировании данных в сессии. Что я имею в виду. Я предлагаю всю работу с данными, хранящимися внутри сессии, перенести в отдельный класс и работать только с ним (интерфейс можно сделать как и у Session). На событии Session_End сериализовать все данные, находящиеся там на текущий момент в постоянное хранилище (файлик, бд). Класс сделать singleton-ом, добывающим свой instance из текущей сессии и ложащий его туда в случае отсутствия (можно и просто Session_start обрабатывать). Внутри класса инкапсулировать всю логику проверки на наличие данных в сессии. При необходимости десериализовывать данные из постоянного хранилища. Предусмотреть различные стратегии сериализации-десериализации в зависимости от данных (к примеру, число можно и просто сохранить, а вот вместо датасета сохранить текст запроса к БД и получать его заново. Важные данные размещать в таблицах БД как часть основных данных приложения (та же самая корзина заказов из всех примеров :) )). В общем полный простор для полета фантазии :). И у юзера вообще не будет тогда проблем с протухшими сесиями. В любой (или почти в любой) момент времени он сможет продолжить работу с того места, где он остановился неделю назад. Как идея? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 08:20 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Вот и я про то - ладно было бы необходимо продолжать сессию по истечению тайм-аута - согласен, немного проблематично, но решаемо... Только автору нужно не это - а банальная обработка ошибки при отсутствии значения в переменной сессии с последующим редиректом на суперстраницу с уведомлением о том, что пользователь долго отсутствовал и его сессия закончилась - вот какая ОГРОМНАЯ проблема... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 08:55 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Артем1 , вопрос не в том, чтобы поддержать сессию в случае краха приложения или ещё какой непредвиденной ситуации, для такого случая есть стандартный сервис Session State Server. Всего-то в web.config указать Код: plaintext 1. 2. 3. 4. 5. c:\>net start aspnet_state И ничего писать не надо. Необходимо не это, а надо нормально завершить работу приложения в случае истечения сессии. Это нормальная практика и здесь не надо заботиться о карзине и т.п. просто надо сказать что сессия истекла и перенаправить юзера на страницу входа например. Вы же много раз это видели. 2vladgrig А кто говорил что проблема ОГРОМНАЯ ? Ищется грамотное и элегантное решение, а не геморой с обработкой исключений на каждой странице, а их десятки. P.S. Просьба не воспринимать всё, что я пишу как давление на личнось, мы здесь обсуждаем варианты решения задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 14:45 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Позвольте я снова влезу с Global.asax. Если не хотите создавать обработчик исключений для каждой страницы, можете использовать Application_Error в вышеуказанном файле, где по коду обрабатывать возникшее исключение. Проще, мне кажется, некуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 15:02 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Просто Лосьможете использовать Application_Error Хм, если удастся опознать исключение ... очень сложно. Есть идея, сейчас попробую, результат напишу ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 15:42 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
авторИщется грамотное и элегантное решение, а не геморой с обработкой исключений на каждой странице, а их десятки. да что вы зациклились на одной этой проблеме - да ещё и стараетесь найти для неё грамотное решение - подумайте о других исключениях которые могут выпрыгнуть, как будете с ними бороться - или вы конгениально соорудили ресурс, что проблема только в этом? Очень сомневаюсь... Бывают же ошибки - даже не зависящие от вас - и всё одно пользователь увидит окошко (если вы не сделаете своего ErrorPage) или не обработаете их подобающим образом. Так какой смысл заморачиваться на единице, когда решать надо для сотни (а для сотни есть стандартные средства о которых вам толкуют все участники топика). Кстати, ИМХО крутые вы программеры, если только после создания сотен страниц вспомнили об исключительных ситуациях и их обработке... авторПросьба не воспринимать всё, что я пишу как давление на личнось, мы здесь обсуждаем варианты решения задачи. Я надеюсь здесь все знают о том что идут дебаты а не ругань какая то... Так что и меня уж извините, если кого задеваю с пылу с жару... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 18:57 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
:) vladgrig да что вы зациклились на одной этой проблеме Один пишем, два в уме. Я пока пишу другие места, а это в голове крутится параллельно. vladgrig Бывают же ошибки - даже не зависящие от вас - и всё одно пользователь увидит окошко (если вы не сделаете своего ErrorPage) или не обработаете их подобающим образом. Да не в этом же дело. Да сделаю я свою страницу для ошибок. Это фигня. Я не могу нормально обработать завершение сессии. Ну не загорается у меня лампочка где лежать гениальные идеи ... :) vladgrig Кстати, ИМХО крутые вы программеры, если только после создания сотен страниц вспомнили об исключительных ситуациях и их обработке... Да хоть 1000. Пока проект не пущен в эксплуатацию, делаю что хочу. Я вообще во время разработки поймал таймаут сесси только 1 раз, когда чай пошёл пить. :) И вообще, вебморду с движком я один пишу, помочь мне не кому кроме интернета :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 19:15 |
|
||
|
Грамотная обработка таймаута сессии
|
|||
|---|---|---|---|
|
#18+
Вобщем фигня такая: (таймаут сессии выставил на 1 мин, глобально) 1. Старт сессии (SessionID = 1234567) записывается объект в сессию - SessionAppModel дальше всё работает в нём 2. Работа приложения Какая-то страница добавляет дочернюю модель в SessionAppModel.AddChild(myModel) и от запроса к запросу с ней работает 3. Открываю ту самую страницу 4. жду 1 мин вижу сработало Session_End, закрывается SessionID = 1234567 5. Теперь жму на странице кнопку, дальше интересно. 6. Срабатывает Session_Start и номер сессии тотже SessionID = 1234567 И естественно создается новый SessionAppModel без дочерних моделей Дальше ошибка когда страница пытается получить доступ к несуществующей дочерней модели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 20:19 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=33226995&tid=1393691]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 446ms |

| 0 / 0 |
