Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
drakut
Member

Откуда: Москва
Сообщений: 82
Коллеги, столкнулся с любопытной ситуацией при выводе данных CSP-сессий в своем приложении:
 rs=##class(%ResultSet).%New("%CSP.Session:SessionInfo")
 
rs.Execute() 
 
while rs.Next() {
   
session ##class(%CSP.Session).%OpenId(rs.Get("ID"),0)
   
session.Username_", "_rs.Get("Username")
 
}
 
Выводит разные значения Username. Если НЕ использовать снятие блокировки при открытии объекта сессии (нолик в параметре) - виснет, выполняется очень долго. Никто с подобным не сталкивался? Может есть какие-то best practice при работе с сессиями?
8 июн 16, 12:50    [19270853]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
DAiMor
Member

Откуда: Volzhsky -> Moscow -> CZ, Brno
Сообщений: 2561
drakut,

конечно будет виснуть, так как могут быть сессии которые в данный момент выполняют запросы, еще могут быть хранимые сессии, незнаю используютя ли у вас такие. Хранимые сессии, оставляют блокировку на все время жизни сессии.
8 июн 16, 12:59    [19270915]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
drakut
Member

Откуда: Москва
Сообщений: 82
DAiMor,
Спасибо, а как тогда мне правильно узнать параметры сессии? Вывожу время создания сессии (начала работы), время бездействия и время работы как:
 rs=##class(%ResultSet).%New("%CSP.Session:SessionInfo")
 
rs.Execute() 
 
while rs.Next() {
  
session ##class(%CSP.Session).%OpenId(rs.Get("ID"),0)
  
'$ISOBJECT(session){
    
err = ..GetLocaleCaption("Ошибка получения информации о сессии")
    

  
}
  
ip $S($F(session.LicenseId,"@")>0:$P(session.LicenseId,"@",2), 1:session.LicenseId)
  
  
fio ""
  
fio fio_" ("_session.Username_", "_rs.Get("Username")_", "_session.SessionId_", "_rs.Get("ID")_")"
  
  
start session.CreateTime ;время начала
  
upTime $ZT$P($H,",",2) - $ZTH$P(start," ",2) ) ) ;время работы
  
dTime =  $ZT$P($H,",",2) - $ZTH$P(session.LastModified," ",2) ) ) ;время бездействия
  
tOut session.AppTimeout ;таймаут
 
}
И почему разный username из классового запроса и свойства объекта?
8 июн 16, 13:13    [19271005]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3111
Блог
drakut,

Посмотрите описание к методам Lock/Unlock у класса %CSP.Session Parallel Processing with Ajax
8 июн 16, 13:18    [19271037]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
drakut
Member

Откуда: Москва
Сообщений: 82
servit, спасибо, учел. Но при разблокировке сесси явно d session.Unlock(0) или d session.Unlock(1) - все равно пользователь из запроса класса и из свойства сесси как объекта - разный.. В свойствах объекта пользователь выводится как $USERNAME, то есть все время "я".
8 июн 16, 13:35    [19271136]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3111
Блог
drakut
И почему разный username из классового запроса и свойства объекта?
Исходники ведь не закрыты: можно увидеть, откуда берётся username в запросе и в самом объекте.
Проще будет самостоятельно пройтись по ^%cspSession и взять что нужно.
8 июн 16, 13:44    [19271186]     Ответить | Цитировать Сообщить модератору
 Re: CSP-сессии:разные свойства сессии из запроса и из объекта сессии  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3111
Блог
drakut,
Вот аналог Вашего кода
 #include %cspBuild
 
SessionId=0
 
f  {
  
SessionId=$order(^%cspSession(SessionId),1,data)
  
q:SessionId=""
  
  
LicenseId=$lg(data,$$$sesLicenseId)
  
ip $S($F(LicenseId,"@")>0:$P(LicenseId,"@",2), 1:LicenseId)
 
  
fio ""
  
fio fio_" ("_$username_", "_$lg($lg(data,$$$sesSecurityContext))_", "_SessionId_", "_SessionId_")"
 
  
start $lg(data,20) ;время начала
  
upTime $ZT$P($H,",",2) - $ZTH$P(start," ",2) ) ) ;время работы
  
dTime =  $ZT$P($H,",",2) - $ZTH$P($lg(data,21)," ",2) ) ) ;время бездействия
  
tOut $lg(data,1) ;таймаут
 
}
8 июн 16, 14:10    [19271352]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить