11. marts 2008 - 08:27Der er
14 kommentarer og 3 løsninger
Kan man checke, om en bruger er logget ind
Hejsa, jeg har egentlig ingen erfaring i C5 som sådan overhovedet, men jeg ville gerne kunne checke (programmere), om en given bruger er logget på C5 serveren. Er dette muligt?
Ja, det er imponerende - tak for svarene. Men jeg er ikke ude efter en manuel måde at checke det, det skal være automatisk; altså noget jeg kan checke fra et script (programmeringssprog er ikke afgørende, kan være forskelligt)
FUNCTION ENUM NejJa UserLoggedIn(INT &UserId) #MACROLOAD(USER_GROUP_RIGHTS) INT &User INT &MaxFound INT &NewSes INT &LookforMax INT &RecNo INT &SesNum STR 90 &UserInfo
#Loop(&User,1,#MaxUserCount) IF #SessionUser(&User) THEN SET &MaxFound = &User ENDIF END
SET &LookforMax= &MaxFound+2 SET &NewSes = 0 WHILE &NewSes <= &LookforMax #Add(&NewSes,1) IF &UserId == STR2NUM(#SessionUser(&NewSes)) THEN RETURN 1 ENDIF END RETURN 0
Så burde du kunne skrive:
IF userLoggedIn(Username2id("Hest")) THEN // Her inde er bruger HEST logget ind så gør et eller andet ENDIF
Jeg forstår spørgsmålet om du udefra kan checke om en given bruger er inde i C5? Det må man kunne, når du bruger SQL. Er en given bruge inde i SQL-databasen eller ej.
Der findes godt nok et sysinfokald i C5, men jeg ved ikke hvordan man tilgår det udefra.
Gode bud, tak for svarene og hjælpen. Fordi det er C5's eget programmeringssprog må jeg videregive det til en kollega, men umiddelbart kan det nok bruges (dog ikke direkte, da det som mariaf bemærker, ikke kan tilgåes udefra). Derfor vil jeg også kigge på dit bud, mariaf, som jo vil være glimrende og mere simpelt hvis muligt.
Hvis man er villig til at give lidt køb på sikkerheden, kan det godt kaldes udefra (tror jeg). Men det vil være langsomt, og resultatet (logget ind eller ej), skal returneres i en fil.
Hmmm nej. Hvis det kan checkes direkte op mod SQL db'en, som mariaf foreslår, så er det nok den bedste løsning. Alternativt at bruge din funktion til at vedligeholde en tabel i sql databasen om folk er logget ind eller ej. Og så slå op i den udefra.
Marias bud med et sysinfo-kald vil give samme problematik: at kalde c5 kode udefra.
M.h.t. at vedligeholde en tabel i databasen som holder styr på indloggede brugere, vil det desværre nok også give nogle problemer, m.h.t. c5-crashes eller andre uautoriserede nedlukninger af c5, hvor c5-koden ikke kan rydde op i tabellen.
Problemet er arkitektonisk det, at c5 er en to-tier løsning, hvor der ingen applikation-tier er, som kan holde styr på disse ting og rydde op, hvis forbindelsen til klienten forsvinder.
Der er kun klienten (som afvikler applikationskode) og database som besvarer SQL-forespørgsler og udfører opdateringer på foranledning af SQL-kode sendt af klienten. Og dermed er der kun klienten til at rydde op, og det kan den jo ikke hvis den crasher eller på anden måde afbrydes uautoriseret (kill af process f.eks.).
Så kunne man selvfølgelig lave noget kode (som evt. kører som en service), som sletter poster fra tabellen med indloggede brugere, hvis de har været logget ind længe f.eks. længere end et døgn.
Yes, 100% holdbar løsning vil det nok aldrig være. Tankerne gik faktisk så på hver dag kl. X at sætte alle til at være logget af. Tættere på kommer man så nok ikke, desværre.
Til bl.a. jasman, hvis du overvåger denne tråd ... jeg opretter lige et nyt tillægsspørgsmål med titlen "Kan man checke, om en bruger er logget ind 2" ... hvis jeg kunne logge dig til at kigge der...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.