Получить текущий сеанс, не выводя персональные сведения

Учебные задачи

Сеанс и физическое соединение — разные объекты. НомерСоединения = 0 означает отсутствие назначенного соединения, а не повреждённый сеанс.

Где и как запускать

Полный серверный общий модуль учебной копии базы. Чтение встроенного API, не администрирование RAS/COM.

Подготовка

  1. Только отдельная учебная копия базы. Создайте серверный общий модуль УчебныеЗадачи; вставьте полный модуль выбранного урока и вызовите ВыполнитьПример() из серверной учебной команды.

  2. Это встроенный API 1С, не COM/RAS. Соединение с агентом кластера, логин администратора и регистрация COM не нужны. Тонкий клиент вызывает серверную команду, не выполняет эти функции напрямую.

  3. Для списков сеансов/соединений по локальной справке нужно право АктивныеПользователи. Если его нет, пример останавливается с пояснением; права и привилегированный режим код не меняет.

  4. Проверки только читают данные. Они не завершают сеансы, не отключают соединения, не меняют часовые пояса и не выводят IP, имя компьютера или имя пользователя в журнал.

Процедура ВыполнитьПример() Экспорт
    Текущий = ПолучитьТекущийСеансИнформационнойБазы();
    Если ТипЗнч(Текущий) <> Тип("СеансИнформационнойБазы") Тогда
        ВызватьИсключение "Ожидался встроенный СеансИнформационнойБазы, не COM Сеанс";
    КонецЕсли;
    Сообщить(ТипЗнч(Текущий.НомерСеанса) = Тип("Число"));
    Сообщить(ТипЗнч(Текущий.НачалоСеанса) = Тип("Дата"));
    Сообщить("Номер своего сеанса: " + Строка(Текущий.НомерСеанса));
    Сообщить("Приложение: " + Текущий.ИмяПриложения);
    Сообщить("Имя компьютера заполнено: " + Строка(НЕ ПустаяСтрока(Текущий.ИмяКомпьютера)));
    Сообщить("Адрес клиента заполнен: " + Строка(НЕ ПустаяСтрока(Текущий.IPАдресКлиента)));
    Если Текущий.Пользователь = Неопределено Тогда
        Сообщить("Пользователь этого сеанса не определён");
    Иначе
        Сообщить("Объект пользователя присутствует; имя не выводится");
    КонецЕсли;
    Если Текущий.НомерСоединения = 0 Тогда
        Сообщить("У сеанса сейчас нет назначенного соединения");
    Иначе
        Сообщить("Номер текущего соединения: " + Строка(Текущий.НомерСоединения));
    КонецЕсли;
    Фоновое = Текущий.ПолучитьФоновоеЗадание();
    Если Фоновое = Неопределено Тогда
        Сообщить("Сеанс не связан с выполнением фонового задания");
    Иначе
        Сообщить(ТипЗнч(Фоновое) = Тип("ФоновоеЗадание"));
        Сообщить("Сеанс принадлежит фоновому заданию; оно не отменяется");
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. Функция возвращает СеансИнформационнойБазы, а не административный COM-объект Сеанс с английскими полями.

  2. Номер сеанса уникален среди сеансов текущей базы. НомерСоединения — отдельное число и по справке может быть 0.

  3. ИмяПриложения показывает контекст: например 1CV8C, WebClient, BackgroundJob. Не объявляем все вызовы обязательно пользовательским тонким клиентом.

  4. IP и имя компьютера проверяются на заполненность, но сами строки не выводятся. Пользователь может быть Неопределено и проверяется до возможного дальнейшего обращения.

  5. ПолучитьФоновоеЗадание возвращает связанное задание или Неопределено. Выполнение из обычной команды обычно не связано с фоновым заданием; в фоновой процедуре появляется другая ветка. Новое задание не запускается.

Как проверить результат

  1. Две контрольные Истина, фактический номер и идентификатор приложения, два признака заполненности и пояснения пользователя/соединения.

  2. Нулевой номер соединения обрабатывается штатно; положительное число не навязывается как обязательный результат.

Ожидаемый результат

Свой сеанс исследован без персональных значений и без административного подключения.

На что обратить внимание

  1. Сеанс может пережить разрыв соединения: не используйте номер соединения как постоянный идентификатор сеанса.

  2. Не добавляйте в диагностику имена пользователей, IP и токены без отдельной необходимости.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.