Руководство Melbis Shop: оглавление
Сессия — это работа MCP-сервера с одним магазином под одним
пользователем. Всё, что агент делает с магазином, происходит внутри
открытой сессии. Четыре инструмента семьи session_ её
открывают и обслуживают, и ни один из них не требует прав: сессия должна
открываться раньше, чем что-либо можно запретить.
session_init —
осмотреться: в какой магазин войдёт сессия и запущена ли программа.
Ничего не меняет, вызывать можно сколько угодно.session_connect —
открыть сессию с темой разговора. Ответ сообщает всё о ней и приносит
общие правила агента.session_rules_accept и
повторяет вызов.session_clear показывает их и
удаляет те, что назовёт человек.Агент называет разговор одним словом, темой: по ней сервер держит папку разговора, и после разрыва та же тема возвращает агента к его данным. Больше агент при входе ничего не выбирает — ни магазин, ни пользователя. Магазин — тот, что последним открыт в программе или за которым закреплён сервер. Пользователь — тот, под которым человек сидит в программе, или сохранённый в её настройках. Поэтому агент не войдёт туда, куда не входил человек, а пароль не попадёт в переписку. Переключить магазин может только человек, в программе. Как именно сервер находит магазин и пару логин-пароль — «Вход, права, лицензия».
При входе сервер запоминает и держит до конца сессии:
| Что | Зачем |
|---|---|
| магазин и пользователь | все запросы идут в этот магазин под этим пользователем |
| тему разговора | всё, что агент и инструменты пишут на этот компьютер, ложится в папку этой темы |
| выданные права | на вызов невыданного инструмента сервер отказывает сразу, не обращаясь к магазину |
| критические заметки памяти: сколько их и какие прочитаны | пока не прочитаны все, остальные инструменты отказывают |
| принятые правила инструментов и случайное число для их кодов | принятые правила не спрашиваются повторно, а код из другой сессии не подходит |
Лицензию сессия не запоминает: файл лицензии сервер ищет заново при каждом запросе.
Сессия живёт в процессе сервера. Она кончается, когда:
Not connected, и агент
входит заново с той же темой: папка разговора и её данные остались на
месте;session_connect.
Сессия открывается заново, и всё запомненное сбрасывается.| Что случилось | Почему |
|---|---|
пришёл отказ STORE_SWITCHED |
в программе открыт другой магазин, а незакреплённый сервер работает только с магазином программы |
| владелец выдал или снял право | права запоминаются при входе |
пришёл отказ Not connected |
сессии нет |