В информатике и сетях в частности сеанс — это ограниченная по времени двусторонняя связь, практический (относительно высокий) уровень в протоколе TCP/IP, обеспечивающий интерактивное выражение и обмен информацией между двумя или более коммуникационными устройствами или концами — будь то компьютеры, автоматизированные системы или живые активные пользователи (см. сеанс входа в систему ). Сеанс устанавливается в определенный момент времени, а затем «разрывается» — завершается — в какой-то более поздний момент. Установленный сеанс связи может включать более одного сообщения в каждом направлении. Сеанс, как правило, является сеансом с сохранением состояния , что означает, что по крайней мере одна из общающихся сторон должна хранить информацию о текущем состоянии и сохранять информацию об истории сеанса, чтобы иметь возможность общаться, в отличие от общения без сохранения состояния , где общение состоит из независимых запросов с ответами.
Установленный сеанс является основным требованием для выполнения ориентированной на соединение коммуникации . Сеанс также является основным шагом для передачи в режимах связи без установления соединения . Однако любая однонаправленная передача не определяет сеанс. [1]
Транспорт связи может быть реализован как часть протоколов и служб на прикладном уровне , на сеансовом уровне или на транспортном уровне в модели OSI .
В случае транспортных протоколов, которые не реализуют формальный уровень сеанса (например, UDP ) или когда сеансы на уровне приложений обычно очень кратковременны (например, HTTP), сеансы поддерживаются программой более высокого уровня с использованием метода, определенного в обмениваемых данных. Например, обмен HTTP между браузером и удаленным хостом может включать HTTP-cookie , который идентифицирует состояние, например уникальный идентификатор сеанса , информацию о предпочтениях пользователя или уровне авторизации.
Считалось, что HTTP/1.0 допускает только один запрос и ответ в течение одного сеанса Web/HTTP. Версия протокола HTTP/1.1 улучшила это, завершив Common Gateway Interface (CGI), что упростило поддержку сеанса Web и поддержку файлов cookie HTTP и загрузок файлов.
Большинство сеансов клиент-сервер поддерживаются транспортным уровнем — одно соединение для одного сеанса. Однако каждая фаза транзакции сеанса Web/HTTP создает отдельное соединение. Для поддержания непрерывности сеанса между фазами требуется идентификатор сеанса . Идентификатор сеанса встроен в ссылки <A HREF> или <FORM> динамических веб-страниц, чтобы он передавался обратно в CGI. Затем CGI использует идентификатор сеанса для обеспечения непрерывности сеанса между фазами транзакции. Одним из преимуществ одного соединения на фазу является то, что оно хорошо работает при соединениях с низкой пропускной способностью (модемных).
Сеансы TCP обычно реализуются в программном обеспечении с использованием дочерних процессов и/или многопоточности , где новый процесс или поток создается, когда компьютер устанавливает или присоединяется к сеансу. Сеансы HTTP обычно реализуются не с использованием одного потока на сеанс, а с помощью базы данных с информацией о состоянии каждого сеанса. Преимущество с несколькими процессами или потоками заключается в сниженной сложности программного обеспечения, поскольку каждый поток является экземпляром со своей собственной историей и инкапсулированными переменными. Недостатком являются большие накладные расходы с точки зрения системных ресурсов, а также то, что сеанс может быть прерван при перезапуске системы.
Когда клиент может подключиться к любому серверу в кластере серверов, возникает особая проблема в поддержании согласованности, когда серверы должны поддерживать состояние сеанса. Клиент должен быть либо направлен на тот же сервер на протяжении всего сеанса, либо серверы должны передавать информацию о сеансе на стороне сервера через общую файловую систему или базу данных. В противном случае клиент может повторно подключиться к другому серверу, нежели тот, с которого он начал сеанс, что вызовет проблемы, когда новый сервер не будет иметь доступа к сохраненному состоянию старого.
Сеансы на стороне сервера удобны и эффективны, но могут стать сложными в использовании в сочетании с системами балансировки нагрузки/высокой доступности и вообще непригодны для использования в некоторых встроенных системах без хранилища. Проблема балансировки нагрузки может быть решена путем использования общего хранилища или путем применения принудительного пиринга между каждым клиентом и одним сервером в кластере, хотя это может поставить под угрозу эффективность системы и распределение нагрузки.
Метод использования сессий на стороне сервера в системах без массового хранения данных заключается в резервировании части оперативной памяти для хранения данных сессии. Этот метод применим для серверов с ограниченным числом клиентов (например, маршрутизатор или точка доступа с редким или запрещенным доступом к более чем одному клиенту одновременно).
Клиентские сеансы используют файлы cookie и криптографические методы для поддержания состояния без хранения большого количества данных на сервере. При представлении динамической веб-страницы сервер отправляет текущие данные о состоянии клиенту (веб-браузеру) в виде файла cookie. Клиент сохраняет файл cookie в памяти или на диске. С каждым последующим запросом клиент отправляет файл cookie обратно на сервер, а сервер использует данные для «запоминания» состояния приложения для этого конкретного клиента и генерации соответствующего ответа.
Этот механизм может хорошо работать в некоторых контекстах; однако данные, хранящиеся на клиенте, уязвимы для подделки пользователем или программным обеспечением, имеющим доступ к клиентскому компьютеру. Для использования клиентских сеансов, где требуются конфиденциальность и целостность, необходимо гарантировать следующее:
Для этого серверу необходимо зашифровать данные сеанса перед отправкой их клиенту, а изменение такой информации любой другой стороной должно быть предотвращено с помощью криптографических средств.
Передача состояния туда и обратно с каждым запросом практична только в том случае, если размер cookie невелик. По сути, клиентские сеансы обменивают дисковое пространство сервера на дополнительную пропускную способность, которая потребуется каждому веб-запросу. Более того, веб-браузеры ограничивают количество и размер файлов cookie, которые может хранить веб-сайт. Чтобы повысить эффективность и обеспечить больше данных сеанса, сервер может сжимать данные перед созданием cookie, распаковывая их позже, когда клиент возвращает cookie.
Токен сеанса — это уникальный идентификатор, который генерируется и отправляется с сервера клиенту для идентификации текущего сеанса взаимодействия. Клиент обычно хранит и отправляет токен как HTTP-cookie и/или отправляет его как параметр в запросах GET или POST. Причина использования токенов сеанса заключается в том, что клиенту нужно только обработать идентификатор — все данные сеанса хранятся на сервере (обычно в базе данных , к которой у клиента нет прямого доступа) и связаны с этим идентификатором. Примеры имен, которые некоторые языки программирования используют при именовании своих HTTP-cookie, включают JSESSIONID ( JSP ), PHPSESSID ( PHP ), CGISESSID ( CGI ) и ASPSESSIONID ( ASP ).
В человеко-компьютерном взаимодействии управление сеансами — это процесс отслеживания активности пользователя в сеансах взаимодействия с компьютерной системой .
Типичные задачи управления сеансами в среде рабочего стола включают отслеживание того, какие приложения открыты и какие документы открыло каждое приложение, чтобы можно было восстановить то же состояние, когда пользователь выходит из системы и входит в нее позже. Для веб-сайта управление сеансами может включать требование к пользователю повторно войти в систему, если сеанс истек (т. е. прошел определенный промежуток времени без активности пользователя). Он также используется для хранения информации на стороне сервера между HTTP-запросами.
Менеджер сеансов рабочего стола — это программа, которая может сохранять и восстанавливать сеансы рабочего стола. Сеанс рабочего стола — это все запущенные в данный момент окна и их текущее содержимое. Управление сеансами в системах на базе Linux осуществляется с помощью X session manager . В системах Microsoft Windows управление сеансами осуществляется с помощью подсистемы Session Manager Subsystem (smss.exe); функциональность сеансов пользователя может быть расширена сторонними приложениями, такими как twinsplay.
Управление сеансами особенно полезно в веб-браузере , где пользователь может сохранять все открытые страницы и настройки и восстанавливать их позднее или на другом компьютере (см. переносимость данных ).
Чтобы помочь восстановиться после сбоя системы или приложения, страницы и настройки также могут быть восстановлены при следующем запуске. Google Chrome , Mozilla Firefox , Internet Explorer , OmniWeb и Opera являются примерами веб-браузеров, которые поддерживают управление сеансами. Управление сеансами часто осуществляется с помощью применения файлов cookie .
Протокол передачи гипертекста (HTTP) не имеет состояния. Управление сеансами — это метод, используемый веб-разработчиком для того, чтобы протокол HTTP без состояния поддерживал состояние сеанса. Например, после аутентификации пользователя на веб-сервере следующий HTTP-запрос пользователя (GET или POST) не должен приводить к тому, что веб-сервер снова будет запрашивать учетную запись и пароль пользователя. Для обсуждения методов, используемых для достижения этого, см. HTTP cookie и идентификатор сеанса
В ситуациях, когда несколько веб-серверов должны совместно использовать знания о состоянии сеанса (что типично для кластерной среды), информация о сеансе должна совместно использоваться узлами кластера, на которых запущено программное обеспечение веб-сервера. Методы совместного использования состояния сеанса между узлами в кластере включают: многоадресную передачу информации о сеансе узлам-членам (см. JGroups для примера этой методики), совместное использование информации о сеансе с узлом-партнером с использованием распределенной общей памяти или виртуализации памяти , совместное использование информации о сеансе между узлами с использованием сетевых сокетов, хранение информации о сеансе в общей файловой системе, такой как распределенная файловая система или глобальная файловая система , или хранение информации о сеансе вне кластера в базе данных .
Если информация о сеансе считается временной, изменчивой, которая не требуется для неотказуемости транзакций и не содержит данных, которые подлежат аудиту соответствия (например, в США см. Закон о переносимости и подотчетности медицинского страхования и Закон Сарбейнса-Оксли в качестве примеров двух законов, которые требуют аудита соответствия), то можно использовать любой метод хранения информации о сеансе. Однако, если информация о сеансе подлежит аудиту соответствия, следует рассмотреть метод, используемый для хранения сеанса, репликации и кластеризации.
В сервисно-ориентированной архитектуре сообщения Simple Object Access Protocol или SOAP, созданные с помощью сообщений Extensible Markup Language ( XML ), могут использоваться потребительскими приложениями для того, чтобы веб-серверы создавали сеансы.
Так же, как HTTP является протоколом без сохранения состояния , так и SMS . Поскольку SMS стали совместимыми между конкурирующими сетями в 1999 году [2] , а текстовые сообщения начали свой подъем к тому, чтобы стать повсеместной глобальной формой общения, [3] различные предприятия стали интересоваться использованием канала SMS в коммерческих целях. Первоначальные услуги не требовали управления сеансами, поскольку они были только односторонними (например, в 2000 году первая мобильная служба новостей была доставлена через SMS в Финляндии ). Сегодня эти приложения называются сообщениями от приложения к равноправному (A2P) в отличие от сообщений одноранговой сети (P2P) . Разработка интерактивных корпоративных приложений требовала управления сеансами, но поскольку SMS является протоколом без сохранения состояния, как определено стандартами GSM [4] , ранние реализации контролировались на стороне клиента , заставляя конечных пользователей вручную вводить команды и идентификаторы услуг.