Керування сеансами ASP.NET [Приклад]
⚡ Розумний підсумок
Керування сеансами ASP.NET дозволяє HTTP-застосунку без урахування стану запам'ятовувати дані користувача між запитами. У ньому пояснюється ViewState, об'єкт Session для зберігання пар ключ-значення, робочий приклад, режими стану сеансу, налаштування тайм-ауту та переваги стану сеансу.
Керування сеансами ASP.NET
Протокол HTTP, на якому працюють усі веб-програми, є протоколом без стану. Без громадянства це просто означає, що інформація не зберігається від одного запиту до іншого.
Наприклад, якщо у вас була сторінка входу, яка має 2 текстові поля: одне для імені, а інше для пароля. Коли ви натискаєте кнопку «Вхід» на цій сторінці, програмі потрібно переконатися, що ім’я користувача та пароль передаються на наступну сторінку.
В ASP.Net це робиться різними способами. Перший спосіб – за допомогою концепції під назвою ViewState. Тут ASP.Net автоматично зберігає вміст усіх елементів керування. Він також гарантує його передачу на наступну сторінку. Це робиться за допомогою властивості під назвою ViewState.
Для розробника не ідеально змінювати щось у стані перегляду. Це тому, що він повинен оброблятися лише ASP.Net.
Об'єкт сеансу ASP.NET
Інший спосіб полягає у використанні об’єкта під назвою «Об’єкт сеансу». Об’єкт Session доступний протягом усього життєвого циклу програми. Ви можете зберігати будь-яку кількість пар ключ-значення в об’єкті Session. Отже, на будь-якій сторінці ви можете зберегти значення в об’єкті Session за допомогою наведеного нижче рядка коду.
Session["Key"] = value
Це зберігає значення в об'єкті Session, а частина «ключ» використовується для надання значення імені. Це дозволяє отримати значення пізніше. Щоб отримати значення, можна просто виконати наведену нижче інструкцію.
Session["Key"]
Приклад об’єкта сеансу ASP.NET
У нашому прикладі ми використовуватимемо об'єкт Session для збереження імені, введеного в текстове поле імені на сторінці. Потім ми отримаємо це значення та відповідно відобразимо його на сторінці. Додамо наведений нижче код до файлу Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Пояснення:
- Перший рядок коду приймає значення текстового поля Name та зберігає його в об'єкті Session. Вказуючи код Session[“Name”], ми надаємо властивості ім'я під назвою “Name”. Вказуючи ім'я для властивості, стає легше отримати її пізніше.
- Наступний рядок коду отримує збережене значення з об’єкта Session. Потім він записує це значення через метод «Response.Write» назад до клієнта.
- Нарешті, ми робимо всі елементи керування на формі невидимими. Якщо ми цього не зробимо, усі елементи керування разом із значеннями наших відповідей відображатимуться разом.
Після внесення вищезазначених змін ви побачите наступний результат.
вихід:
З результату ви можете побачити, що значення сеансу name було отримано та відображено в браузері.
Режими стану сеансу ASP.NET
ASP.NET може зберігати дані сеансу в кількох місцях, які називаються режимами стану сеансу. Вибраний режим впливає на продуктивність, масштабованість та на те, чи збережуться дані після перезапуску програми. У таблиці нижче наведено їх порівняння:
| режим | Де зберігається стан | Найкраще для |
|---|---|---|
| Вхідний процес | У пам'яті веб-сервера (за замовчуванням) | Односерверні програми; найшвидші, але втрачаються після перезапуску |
| StateServer | Окремий процес служби стану ASP.NET | Веб-ферми; витримує перезапуски програм |
| SQLServer | База даних SQL Server | Веб-ферми, що потребують міцного та масштабованого стану |
| індивідуальні умови | Спеціальний постачальник, якого ви впроваджуєте | Спеціалізовані магазини, такі як Redis |
| вимкненим | Стан сеансу вимкнено | Програми, яким не потрібні сеанси |
InProc використовується за замовчуванням і є найшвидшим, але для розгортань із балансуванням навантаження StateServer або SQLServer забезпечує доступність сеансів на кількох серверах.
Як налаштувати тайм-аут сеансу в ASP.NET
Сеанс не триває вічно; він закінчується після певного періоду бездіяльності. Ви можете встановити цей тайм-аут у файлі web.config за допомогою елемента sessionState, де значення тайм-ауту вказується в хвилинах:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Ви також можете встановити це в коді за допомогою Session.Timeout = 30;Тайм-аут за замовчуванням становить 20 хвилин. Вибір коротшого тайм-ауту швидше звільняє пам’ять сервера та підвищує безпеку, тоді як довший тайм-аут довше дозволяє користувачам залишатися в системі.
Переваги та недоліки стану сесії
Стан сесії зручний, але він має компроміси, які слід зважити, перш ніж покладатися на нього серйозно.
переваги:
- Простий у використанні для зберігання даних кожного користувача, таких як магазинping кошик або дані для входу.
- Може зберігати складні об'єкти, а не лише рядки.
- Дані зберігаються на сервері, тому вони безпечніші, ніж сховище на стороні клієнта.
Недоліки:
- Режим InProc споживає пам'ять сервера та не масштабується в межах веб-ферми.
- Дані сеансу втрачаються, коли сеанс закінчується або програма перезапускається (у режимі InProc).
- Зберігання великих обсягів даних на користувача може негативно вплинути на продуктивність під великим навантаженням.



