Показать сообщение отдельно
Старый 06.07.2004, 15:53   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,480 / 1255 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Эх. Тряхну стариной. Вот код, который запускался из startup Applicationa и следил, если ли уже открытые сесси у данного пользователя. Если есть, то по запросу убивал. Для верности было сочетание terninate + notify. Просто terminate не всегда убивал сессии. Попробйте!
PHP код:
//SP0003_CheckSessions_GNRD
void checkAllOpenSessions_flx()
{
    
int             counter 0;
    
int             maxSessions;
    
int             curSessionId = new xSession().sessionId();
    
container       users;
    
int             sesId;
    
userId          userId;
    
ClientType      clientKind;
    
date            loginDate;
    
int             loginTime;
    
str             clientComputerName;
    
str             databaseSpid;
    
userName        userName;
    
AOSClientMode   clientMode;
    
int             idleTicks;
    
str             info;
    
Session         sessionToTerm;
    
AOSSessionInfo  testSession;
    ;

    [ 
usersmaxSessions ] = SysUsersOnline::getAllOnlineUserInfo();

    for(
counter 1counter <= maxSessionscounter++)
    {
        [   
sesId,
            
userId,
            
clientKind,
            
loginDate,
            
loginTime,
            
clientComputerName,
            
databaseSpid,
            
userName,
            
clientMode,
            
idleTicks
            
] = conPeek(userscounter);

        if (
userId == '-AOS-')
            continue;

        if (
sesId != curSessionId && userId == curuserid())
        {
            
info strfmt("????????! ? ???????????? %1 (%2) ??? ???? ???????? ?????? ? ??????? %3 ???????? ? ?????????? %4 %5 ????? ? %6. ??????? ?????? ???????",
                                    
UserName,
                                    
UserId,
                                    
sesId,
                                    
clientComputerName,
                                    
loginDate,
                                    
time2str(loginTime,1,1));
            if (
Box::yesNo(info,DialogButton::Yes,"????????! ???? ???????? ??????!","?? - ??????? ?????? ?????? (?????????????), ??? - ??????????") == DialogButton::Yes)
            {
                
sessionToTerm = new Session(sesId);
                
sessionToTerm.terminate();
                
info strfmt("????????! ???? ?????? ???? ???????? ? ?????????? %1!"clientComputerName);
                
testSession = new AOSSessionInfo(sesId);
                if (
testSession)
                    
AOSSessionInfo::sendMessage(sesId"????????!"info);
                
sessionToTerm.notify();
                
sessionToTerm NULL;
            }
        }
    }

С Уважением,
Георгий
За это сообщение автора поблагодарили: Logger (5).