Сессии
Одна сессия на аккаунт, что происходит, когда аккаунт входит дважды, и как сессии завершаются.
Сессия существует, пока игрок в системе. У аккаунта одна сессия, и она принадлежит подключению, которое её открыло. Администраторы просматривают и завершают сессии командой /identica admin session; см. Управление аккаунтами.
Вход из второго места
Вход с того же подключения продолжает его сессию. Когда аккаунт входит с другого подключения, пока у него есть сессия, — например, через второй прокси сети, — решает concurrencyPolicy в settings.yml:
| Политика | Прежнее подключение | Новый вход |
|---|---|---|
REPLACE_EXISTING (по умолчанию) | отключается с сообщением engine.concurrentLoginKick, на каком бы прокси оно ни находилось | продолжает игру |
REJECT_NEW | продолжает игру | отклоняется с сообщением engine.concurrentLoginRefused |
sessions:
concurrencyPolicy: "REPLACE_EXISTING"Провайдер может использовать политику, отличную от остальной сети: задайте session.concurrencyPolicy в его записи в providers/providers.yml.
Политика касается подключений, которые уже вошли. Подключение, которое ещё входит, когда другое подключение аккаунта завершает вход, отключается всегда; см. Два подключения с одним ником.
Два входа в один момент
Если два входа одного аккаунта завершаются в один момент — на одном прокси или на двух, использующих общий Redis, — засчитывается только тот, который записан первым. Второй отключается с сообщением engine.concurrentChangeKick, которое просит игрока переподключиться, и не оставляет сессии. Когда игрок переподключится, политика решит, как для любого последующего входа.
Как завершается сессия
- Выход игрока закрывает только сессию его собственного подключения. Подключение, чью сессию заменили, больше не держит сессию, поэтому его выход не завершает сессию, которая её заменила.
- Администратор может завершить сессию командой
/identica admin session end. - Если прокси остановился или упал, не закрыв свои сессии, другие прокси сети ещё видят эти сессии в течение
replication.heartbeatTimeout— по умолчанию 30 секунд. До тех порREJECT_NEWпо-прежнему отклоняет новый вход этих аккаунтов. Прокси, который держит подключение, считает его сессию завершённой, как только это подключение перестаёт быть в сети.
Сообщения
Сообщение в messages.yml | Кому показывается |
|---|---|
engine.concurrentLoginKick | прежнему подключению, которое отключает REPLACE_EXISTING, и подключению, которое ещё входит, когда аккаунт входит в другом месте |
engine.concurrentLoginRefused | новому входу, который отклоняет REJECT_NEW |
engine.concurrentChangeKick | подключению, вход которого раньше записали в другом месте |
Если очистить сообщение, изменится только текст. Подключение всё равно будет отключено или отклонено; вход, отклонённый при REJECT_NEW, тогда показывает общее сообщение об ошибке сценария.
