1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

Вам доводилося відправляти щось в форму на сайті і отримувати повідомлення "Ваша сесія закінчилася"?

Всі, кому я ставив це питання, підтвердили і відповідали бурхливо і моторошно лаялися, що писали видатний посаду в. бац, все втрачено. Я сам недавно так втратив великий пост і не став переписувати досі шкодую текст.

Ми швидко вчимося на хворобливому досвіді і більшість вже виробили правило, що будь-які великі повідомлення копіюють в буфер, перш ніж натиснути кнопку форми.

Сьогодні я хочу розповісти, як ми вирішили цю проблему і чому тепер ви станете добрішими - тому, що ви і ваші клієнти не будуть більше мати справу з такими проблемами при роботі з продуктами нашої компанії

Що таке сесія і навіщо взагалі цю гидоту придумали?

Сесії придумали веб-розробники, щоб ідентифікувати своїх відвідувачів. Придумали вже давно і успішно користуються у всьому світі.

Кожен раз, коли ви заходите на будь-який веб-сайт, системою для вас придумується унікальний номер сесії і сторінка вам віддається саме з цим унікальним номером. І всі наступні ваші звернення до цього сайту йдуть вже з цим ідентифікатором сесії. Так веб-розробники навчилися розуміти, що всі запити йдуть саме від вас, а не від когось іншого.

Тобто сесія - це весь ваш сеанс роботи з веб-сайтом від першого входу на сайт і до завершення роботи з сайтом.

Ось тут якраз і виникає проблема у розробників. Як визначити, що сесія користувача завершена?

Ви ж можете піти кави пити, покурити або будете довго писати повідомлення в блог або форум.

Користувачі обурюються. Чому взагалі не можна зробити сесію нескінченно, якщо ви, веб-розробник, не можете без неї робити веб-сайти.

Загалом сьогодні сформувалася практика в співтоваристві, що сесія користувача триває 20-30 хвилин. Тобто якщо ви відкрили сторінку сайту і 30 хвилин не переходили на інші сторінки сайту і не отримували нові сторінки в цій сесії - веб-сервер просто вирішить, що ви пішли і завершить вашу сесію навіть не замислюючись, пишіть ви пост в блог або повернулися з перекуру і заповнюєте важливу форму.

Що ж робити, я ненавиджу коли закінчується моя сесія ?!

Неодноразово я бачив спроби вирішити цю проблему.

Зазвичай роблять обробку форм так, щоб навіть якщо сесія закінчилася, користувач міг ввести логін і пароль і дані в форму вчинили б в повному обсязі. Ми міркували так само і робили такі обробки в форумах, блогах і інших формах. Але як метод це себе зарекомендувало не дуже добре. І ми не все могли встежити і, що найголовніше, наші партнери взагалі про це не встигають задуматися. Та й навіть якщо все зроблено добре за цією методикою, користувач бачить перше повідомлення, що сесія закінчилася і вже хапається за серце і гнівається на вас.

Інший спосіб - попереджати користувачів, що сесія закінчилася. Веб-сервер, коли створює сторінку, знає тривалість сесії і при наближенні до її завершення може попереджати користувача.

Недавній приклад - Альфа-Клік. Банківський сервіс вкрай потребує дотримання безпеки роботи користувача. Коли сесія наближається до завершення, з'являється таке повідомлення.

1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

Якщо ви за комп'ютером і щось робите на сторінці, то швидко швидко натиснете на кнопку, глибокий видих і подумки говорите спасибі Альфа-Клік, що він не змусив вас гніватися.

Жива сесія - ми зробимо вас добрішими, але ви цього не дізнаєтеся

Нещодавно ми вирішили знайти системне вирішення цієї проблеми, щоб всі сайти на нашій платформі стали більш зручними для відвідувачів.

Нагадаю розробникам, що коли ми створюємо сторінку, ми знаємо тривалість сесії і час створення цієї сторінки. Пам'ятайте, що управляється цей час модулем безпеки, причому незалежно від налаштувань веб-сервера.

У браузері користувача ми непомітно для нього починаємо зворотний відлік. За кілька хвилин до завершення сесії ми включаємо голову і дивимося, чи живий він чи ні. Перевіряємо, коли були останні натискання на клавіатуру, кліки і рухи мишки і ... ми непомітно для користувача продовжуємо сесію якщо він ще живий. Тобто ми шлемо запит до веб-сервера, щоб сервер ЗНАВ, що цей відвідувач ще з нами. Сесія продовжується на сервері і ніяких повідомлень користувачам не показується.

Жива сесія - живе стільки, скільки користувач работет з сайтом.

Якщо ви не проявляли ознаки життя більше тривалості сесії, не рухали мишкою у вікні браузера, не пишете текст, що не кликали або не натискати сенсорний екран, в загальному, якщо ви забули про цю сторінку - ми покажемо вам таке ось повідомлення.

1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

Це повідомлення здасться як в адміністративному розділі, так і на публічних сторінках сайту.

1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

І, звичайно, ви можете управляти живою сесією в настройках головного модуля.

1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

Я трохи спростив для вас виклад. Реалізація вийшла досить складною. Ми планували зробити за пару днів, коли придумали рішення. Але фактично Вадиму Думбравану довелося витратити два тижні на поєднання ідеї з системою безпеки і тести на безпеку, на обхід проблем на хостингах, сумісність і тестування.

Зараз реалізацією ми дуже задоволені сподіваюся і вам вона сподобається.

Доступно рішення буде починаючи з версії головного модуля 9.5.7, який поки доступний в режимі бета-тестування. Трохи поганяємо і випустимо всім для роботи.

Жива сесія зробить нас добрішими непомітно для нас

1С-бітрікс розробникам - я ненавиджу, коли закінчується моя сесія і губляться дані! жива сесія

Правильно помічено, що сесії - це "від програміста". Знати про це користувачеві абсолютно не потрібно і вже тим більше не потрібно втрачати роботу і дані користувача. У цьому сенсі поточна реалізація не боляче то і рятує.

Уявіть, що я дійсно відійшов пообідати або чого то там ще зробити. Більше ніж на 30 хвилин. У мене сесія "протухне" і я змушений буду все таки як то оперувати з тими даними, які вже ввів.

Це тільки один ось такий сценарій. Можна ще придумати. Зрозуміло, що при цьому користувач може скопіювати ВСЕ поля наприклад в текстовий файл (з втратою форматування) або наприклад в Word (c наступними глюками зі зворотним постингом). Або поставити собі утиліту з підтримкою стека копі-паст. Теж рішення.

Все це милиці через те, що разаботчік НЕ подумав про те, що людині пофігу сесія та інше. Мені млинець працювати потрібно!

Є кілька прийшли мені в голову варіантів:
1) Не вбивати сесію зовсім, якщо відкрито з'єднання (відкрито вікно в браузері, є інтернет).

2) Сесію можна прибити, але при постінгу форми потрібно зберегти ВСЕ дані, запросити у користувача пароль і власне завершити дію, яке користувач зробив, натиснувши на кнопку

Зрозуміло, що бувають винятки у вигляді наприклад банків. Але це винятки, які суто підтверджують правила. У випадку з банками сесія переривається не через наших з вами проблем з приводу гальмування або великого кол-ва сесій. Думаю, що ці проблеми якраз вирішені. Там причина саме в безпеки. Тобто та причина, яка зрозуміла будь-якому користувачеві.

) Чи не вбивати сесію зовсім, якщо відкрито з'єднання (відкрито вікно в браузері, є інтернет).


HTTP протокол відноситься до так званих stateless протоколам, у яких немає поняття сесії або сеансу. Це робить його дуже простим і швидким, але і створює проблему, про яку ми з вами і говоримо. Так що не вийде зробити без сесії.

2) Сесію можна прибити, але при постінгу форми потрібно зберегти ВСЕ дані, запросити у користувача пароль і власне завершити дію, яке користувач зробив, натиснувши на кнопку


Ми це вже робимо, я писав вище. Якщо вас турбує повідомлення, можете відключити його появу.

Але мета повідомлення якраз в тому, щоб попередити користувача, що можливі проблеми.

І все ж ще раз звернути увагу, повідомлення з'являється тільки тоді, коли сесія реально минула. Якщо ви просто сидите на сторінці і щось з нею робите, ми продовжимо сесію і нічого не покажемо користувачеві. Раніше так не робили і проблем було набагато більше незалежно від того, знаєте ви про сесія чи ні.

До речі, відповідь писав між довгими дзвінками потягнувся зробити копіпаст за звичкою, втримався і натиснув пост. Сесія то жива ще.

Сергій, Вадим, спасибі за корисне нововведення! Проблема, дійсно, вельми актуальна.

Однак, як уже зазначалося вище, ваше рішення все ж має ряд недоліків. Навскидку в голову прийшов ряд пропозицій щодо вдосконалення

1. Не думаю, що безумовне автоматичне продовження сесії тільки на сторінках з відкритими для заповнення формами істотно збільшить навантаження на сервер. Таке рішення дозволить повністю виключити втрату даних при прикрих, перекуси, перестрілках і т.д.)) Що стосується безпеки, то тут особисто я бачу тільки дві загрози: можливість введення некоректних або підмінених даних в форму проходять повз тимчасово-вільного компа зловмисником і незначне збільшення запасу часу на перехоплення сесії для підкованого зловмисника. Після постинга форми, переходу на іншу сторінку сайту (яка без форми), закриття вікна браузера автоподовження сесії вже не буде діяти, тобто середнє навантаження на веб-сервер практично не зміниться.

2. Якщо все-таки вищеописаний крок неприйнятний для поточних норм безпеки та продуктивності продукту, то можна передбачити, наприклад, яке-небудь ненав'язливе віконечко з кнопкою або галочкою а-ля "Я відійду, не вбивайте мою сесію", розташоване "над сайтом" в зоні видимості користувача.

4. Ну, якщо вже не відмовлятися від попереджувального повідомлення, то можна передбачити нам ньому кнопочку "Скопіювати введені дані в буфер обміну". Хоча, знову ж таки, система чернеток, що зберігаються в куках, мабуть, цікавіше буде.

Ось як-то так Придумував на швидку руку, тому сильно не сваріться, якщо дурість промайне

Зараз з колегами придумали ще одне істотне поліпшення механізму з Живими сесіями

Це фактично призведе до того, що повідомлення буде показуватися користувачеві вже тільки в тому випадку, коли сервер напевно запросив би у нього логін і пароль. Тобто 99% звичайних відвідувачів сайту ніколи не побачать нашого повідомлення і будуть гарантовано і впевнено працювати з сайтом.

Взагалі, з сесіями все дуже складно у нас влаштовано з міркувань безпеки. Ідентифікатори постійно змінюються, сесія захищається спеціальним ідентифікатором, прив'язуються до IP і маса інших хитрощів.

Але ми знайшли безпечне рішення як зберегти всі політики безпеки і забезпечити надійну роботу Живих сесій.


Так, мабуть погарячкував Мав на увазі, що для звичайних користувачі варто зазвичай проста політика безпеки і входять вони на сайт саме запам'ятовуючи себе.

8-800-250-1860 Контакти Карта сайту
Дизайн сайту -