Захоплення репутацією - це не обов'язково погано, але вам потрібно зрозуміти різницю між додатками, що належать до штатів і без громадянства. Коротше кажучи, програми, що містять стан, підтримують інформацію про поточний сеанс, а програми без громадянства - ні. Інформація, що зберігається постійно як частина облікового запису користувача, може або не може зберігатися в сеансі, але зберігання інформації, пов’язаної з обліковим записом користувача, сама по собі не робить додаток державним. Затвердження стану вимагає, щоб сервер підтримував інформацію про сеанс поточного користувача за межі того, що підтримує браузер клієнта. Наприклад, клієнт може підтвердити автентифікацію та надати йому файл cookie JSESSIONID, який він потім надсилає серверу з кожним запитом. Якщо сервер починає зберігати речі в області сеансу програми на основі цього JSESSIONID, він стає релевантним.
Без громадянства
Під статусом без громадянства ми маємо на увазі, що сервер і клієнт не підтримують поточну інформацію про сеанс користувача. Клієнт і сервер можуть використовувати певну форму маркера для аутентифікації між запитами, але інша поточна інформація не зберігається. Типовим випадком використання такого рішення може бути сайт новин, де більшість користувачів (нових споживачів) споживають інформацію, але не виробляють інформацію, яка повертається на сайт. У таких випадках веб-сайту не потрібно підтримувати інформацію про поточний сеанс користувача. Зауважте, що сайт все ще може використовувати файли cookie, щоб ідентифікувати користувача та зберігати інформацію про його користування сайтом, але це все ще може розглядатися як стан без громадянства, оскільки все записане може бути транзакційним, наприклад, за тим, яке посилання користувач натиснув, і що може бути записано сервер, але не підтримується в сеансі користувача.
Надзвичайність на сервері
На сервері великолепний додаток зберігає інформацію про стан поточних користувачів. Цей підхід, як правило, передбачає використання файлів cookie для ідентифікації системи користувача, щоб стан міг підтримуватися на сервері між запитами. Сесії можуть бути або не бути автентифікованими, залежно від контексту програми. Швидкі серверні програми пропонують перевагу кешування інформації про стан користувача на сервері, прискорення пошуку та часу відгуку сторінки. З іншого боку, зберігання інформації в межах сеансу коштує дорого, і в масштабі вона стає дуже ресурсомісткою. Він також створює потенційний вектор атаки для хакерів для спроб і викрадення ідентифікаторів сеансу та крадіжки сеансів користувачів. Державні серверні програми також мають завдання захищати сеанси користувачів від несподіваних перебоїв у роботі сервісу, наприклад, збою сервера.
Державність щодо клієнта
Використовуючи JavaScript та сучасні технології браузера, такі як sessionStorage, програма тепер може легко зберігати інформацію про стан сеансу користувача на пристрої цього користувача. Загалом, заявка все ще може вважатися справжньою, але робота з підтримання стану була перенесена на клієнта. Такий підхід має велику перевагу (для підтримуючого веб-додатка) над підтримкою стану на сервері тим, що кожен користувач фактично підтримує свій власний стан, і на серверній інфраструктурі немає навантаження. У веб-масштабі такий архітектурний вибір має величезні наслідки для витрат на обладнання та електроенергію. Це може буквально коштувати мільйонів доларів на рік, щоб підтримувати стан на сервері. Перехід до системи, що підтримує стан клієнта, може заощадити мільйони доларів на рік.
Токени проти файлів cookie
Файли cookie діють як ідентифікатори для клієнтських пристроїв / браузерів. Їх можна використовувати для зберігання будь-яких речей, але зазвичай вони зберігають певну форму ідентифікатора, наприклад CFID / CFTOKEN у додатках CFML. Файли cookie можуть бути налаштовані на тривалий час у веб-переглядачі користувача, що дозволяє робити такі дії, як підтримка автентифікації в додатку між сеансами браузера. Файли cookie також можуть бути встановлені лише в пам'яті, тому вони закінчуються, коли користувач закриває браузер.
Токени, як правило, є деякою ідентифікаційною інформацією про користувача, яка генерується на сервері (використовуючи шифрування для скремповування інформації), передається клієнту та повертається на сервер з подальшим запитом. Вони можуть бути передані у заголовку запиту та відповіді, що є загальним шаблоном для програм на одній сторінці. В ідеалі кожен запит / відповідь призводить до створення нового маркера, тому маркер не може бути перехоплений і використаний пізніше зловмисником.
Програми для однієї сторінки та стан клієнта
Завдяки SPA, державна інформація завантажується в браузер клієнта і зберігається там. Коли стан змінюється, наприклад, ви публікуєте оновлення свого облікового запису соціальних медіа, клієнт ретранслює цю нову транзакцію на сервер. У цьому випадку сервер зберігає це оновлення до постійного сховища даних, як-от база даних, і ретранслює ту інформацію, яка потрібна для клієнта, щоб йому синхронізуватись із сервером на основі оновлення (наприклад, ідентифікатор для оновлення).
Зауважте, що ця схема зберігання стану на клієнті пропонує переваги для роботи в режимі он-лайн / офлайн, оскільки ви можете бути відключені від сервера, зберігаючи при цьому дещо корисну програму. Twitter - хороший приклад цього випадку, коли ви можете переглянути будь-яку завантажену сторону клієнта у своєму каналі Twitter, навіть якщо ви відключені від програми сервера Twitter. Ця закономірність також створює складність у синхронізації між сервером і клієнтом, що є цілим предметом. Складнощі рішення - це компроміс за можливість підтримувати стан клієнта.
Захотливість клієнта змушує веб-додатків відчувати себе та вести себе як традиційні програми для настільних ПК. На відміну від додатків для настільних комп’ютерів, зазвичай у вас не буде завантажена вся інформація про ваш обліковий запис у сеансі клієнта у веб-переглядачі. Це в багатьох випадках було б непрактично і спричинило б поганий досвід. Ви можете собі уявити, що намагаєтеся завантажити цілий ящик Gmail у браузер? Натомість клієнт підтримує інформацію, наприклад, яку мітку / папку ви шукаєте та де у списку електронних листів у цій папці, яку ви шукаєте. Урівноваження того, яку державну інформацію потрібно підтримувати, і що вимагати за потреби, є ще однією інженерною проблемою цієї моделі, і, знову ж таки, це компроміс між практичністю та наданням хорошого досвіду користувача.
Візки для покупок тощо
Що стосується специфіки, як кошики для покупок, то це дійсно залежить від рішення. Кошик для покупок може зберігатися в базі даних на сервері, він може зберігатися лише в межах сеансу на сервері, а може навіть зберігатися в клієнті. В Amazon є стійкі кошики для покупок для користувачів, які ввійшли в систему, і "тимчасові" візки для анонімних користувачів, хоча ці візки певною мірою зберігаються.
Коли ви говорите про щось на кшталт Google, яке насправді є купою різних додатків, що живуть під одним і тим же брендом, вони, мабуть, не мають спільної архітектури, і кожен побудований так, як найкраще відповідає потребам своїх користувачів. Якщо ви хочете дізнатися, як будується сайт, відкрийте у своєму браузері інструменти для розробників і перегляньте його. Перевірте наявність файлів cookie, перегляньте мережевий трафік і подивіться, як він працює.
Вибачте, якщо ця відповідь трохи розгулює, але державність є складною темою.