powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CSP-сессии:разные свойства сессии из запроса и из объекта сессии
7 сообщений из 7, страница 1 из 1
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252712
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, столкнулся с любопытной ситуацией при выводе данных CSP-сессий в своем приложении:
Код: plaintext
1.
2.
3.
4.
5.
6.
 s rs=##class(%ResultSet).%New("%CSP.Session:SessionInfo")
 d rs.Execute() 
 while rs.Next() {
   s session = ##class(%CSP.Session).%OpenId(rs.Get("ID"),0)
   w session.Username_", "_rs.Get("Username")
 }
 
Выводит разные значения Username. Если НЕ использовать снятие блокировки при открытии объекта сессии (нолик в параметре) - виснет, выполняется очень долго. Никто с подобным не сталкивался? Может есть какие-то best practice при работе с сессиями?
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252726
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakut,

конечно будет виснуть, так как могут быть сессии которые в данный момент выполняют запросы, еще могут быть хранимые сессии, незнаю используютя ли у вас такие. Хранимые сессии, оставляют блокировку на все время жизни сессии.
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252744
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DAiMor,
Спасибо, а как тогда мне правильно узнать параметры сессии? Вывожу время создания сессии (начала работы), время бездействия и время работы как:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 s rs=##class(%ResultSet).%New("%CSP.Session:SessionInfo")
 d rs.Execute() 
 while rs.Next() {
  s session = ##class(%CSP.Session).%OpenId(rs.Get("ID"),0)
  i '$ISOBJECT(session){
    s err = ..GetLocaleCaption("Ошибка получения информации о сессии")
    q 
  }
  s ip = $S($F(session.LicenseId,"@")>0:$P(session.LicenseId,"@",2), 1:session.LicenseId)
  
  s fio = ""
  s fio = fio_" ("_session.Username_", "_rs.Get("Username")_", "_session.SessionId_", "_rs.Get("ID")_")"
  
  s start = session.CreateTime ;время начала
  s upTime = $ZT( $P($H,",",2) - $ZTH( $P(start," ",2) ) ) ;время работы
  s dTime =  $ZT( $P($H,",",2) - $ZTH( $P(session.LastModified," ",2) ) ) ;время бездействия
  s tOut = session.AppTimeout ;таймаут
 }
И почему разный username из классового запроса и свойства объекта?
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252748
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakut ,

Посмотрите описание к методам Lock/ Unlock у класса %CSP.Session Parallel Processing with Ajax
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252763
drakut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit, спасибо, учел. Но при разблокировке сесси явно d session.Unlock(0) или d session.Unlock(1) - все равно пользователь из запроса класса и из свойства сесси как объекта - разный.. В свойствах объекта пользователь выводится как $USERNAME, то есть все время "я".
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252773
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakutИ почему разный username из классового запроса и свойства объекта?Исходники ведь не закрыты: можно увидеть, откуда берётся username в запросе и в самом объекте.
Проще будет самостоятельно пройтись по ^%cspSession и взять что нужно.
...
Рейтинг: 0 / 0
CSP-сессии:разные свойства сессии из запроса и из объекта сессии
    #39252801
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drakut ,Вот аналог Вашего кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 #include %cspBuild
 s SessionId=0
 f  {
  s SessionId=$order(^%cspSession(SessionId),1,data)
  q:SessionId=""
  
  s LicenseId=$lg(data,$$$sesLicenseId)
  s ip = $S($F(LicenseId,"@")>0:$P(LicenseId,"@",2), 1:LicenseId)
 
  s fio = ""
  s fio = fio_" ("_$username_", "_$lg($lg(data,$$$sesSecurityContext))_", "_SessionId_", "_SessionId_")"
 
  s start = $lg(data,20) ;время начала
  s upTime = $ZT( $P($H,",",2) - $ZTH( $P(start," ",2) ) ) ;время работы
  s dTime =  $ZT( $P($H,",",2) - $ZTH( $P($lg(data,21)," ",2) ) ) ;время бездействия
  s tOut = $lg(data,1) ;таймаут
 }
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CSP-сессии:разные свойства сессии из запроса и из объекта сессии
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]