29. januar 2005 - 20:31Der er
22 kommentarer og 1 løsning
kun 1 bruger logged ind pr gang.
Hejsa vi sidder 2 gutter og prøver at lave et system hvor kun en bruger kan være logget ind i systemet. men er gået lidt døde efter at have fundet ud af at session ikke bliver lukket når en bruger forlader side eller bare lukker browser ned.
Vi har en tabel i vores ms sql database der hedder session. i denne opretter vi når en bruger logger ind: sessionid, userid, logindato, logoutdato.
logoutdato bliver sat når han logger af siden. eller når session timer out efter 20 minutter. men lukker han browserne ned på X eller forlader han siden uden at trykke på Logout bliver lgoutdato ikke skrevet før session timer ud efter 20 minutter.
Dette betyder at han ikke kan logge ind hvis han kommer tilbage efter 5 minutter :(
Man kunne benytte en form for polling fra klienten, så serveren holder session i live, sålænge der er en klient som giver lyd fra sig. Ligeså snart klienten ikke har givet lyd fra sig i f.eks. 30 sekunder, kunne denne automatisk lukke for den påg. session og dermed tillade andre at logge på...
At klienten hele tiden holder serveren opdateret med sin tilstedeværelse. Serveren holder styr på hvornår klienten har meldt tilbage og hvis der er gået for længe siden sidste tilbagemelding, kan den tillade evt. andre der forsøger at logge på, at komme på i stedet for. Den tid der må gå inden klienten får timeout bestemmes på serveren (det kunne f.eks. være 30 sekunder). Klienten skal så bare sørge for at melde tilbage til serveren hyppigere end det interval, helst 2 gange indenfor det interval serveren er sat til at få timeout, så der er plads til lidt forsinkelse på klienten uden at den mister retten til den eksklusive "lås".
Jeg ved det er lidt kompliceret forklaret, men jeg håber det alligevel giver lidt mening...
Hvordan ville du gøre det rent "teknisk"? - Du kan ikke få serveren til at gøre noget som helst jo, hvis en bruger smutter fra sin session ? Serveren stoppper med at reagere på den givne bruger, så snart at han lukker sin browser...
Ja, det er klart, men når den næste bruger forsøger at logge på, kan man checke hvornår den bruger, som er logget på, sidst pollede serveren. Hvis det er mere end f.eks. 30 sekunder siden, kan man gå ud fra at den autoriserede bruger ikke længere er logget på og dermed logge den nye bruger på...
Kan godt se din idé, det er dog bare ikke så smart at der er noget der skal stå og "opdatere" sig selv hele tiden - Både på grund af, at hvis det er en skjult iframe, ville den sige "klik klik" hele tiden, dernæst pga. den øgede trafik det ville give på et website med mange brugere... Man må kunne gøre det på en anden måde?
Mht. det første, så havde jeg forestillet mig at benytte et script-element til formålet (jeg mener ikke den klikker) og hvad angår trafikken, så har du fuldstændig ret, det vil generere mere trafik, men kun fra den bruger som er logget på, hvilket vil betyde 2 ekstra forspørgsler hvert 30. sekund og hvis serveren ikke kan trække den ekstra trafik er den godt belastet (og det er jo fint for jer som siteejere, men skidt for Jeres ISP :)).
Anyway! Det er jeres valg, jeg ville blot gøre opmærksom på muligheden.
fair nok og temmelig cool besøgsstatistik i øvrigt :D
Hvad så med at opsamle information om den autoriserede brugers adfærd (ved at logge tidspunkt for sidste besøg) og så ad den vej afgøre om denne er aktiv (nok) til fortsat at være logget på?
Vi har skam allerede statistik over brugerens gøren og laden, vi vil bare undgå at samme konto bliver misbrugt af flere personer, uden at vi hen og "holde øje" med de enkelte brugere...
Ok, jeg havde lige misforstået at det var hver bruger det kun måtte være logget på een gang og ikke en bruger der måtte være logget på ad gangen... så kan jeg bedre forstå din skepsis overfor polling-metoden :)
Så har jeg en anden idé :)
Hvis brugeren forsøget at komme på med et andet sessionid, så kunne du logge ham af det gamle og logge ham på med det nye. På denne måde bliver det i det mindste træls hvis to brugere benytter den samme konto samtidig, da de hele tiden skal logge på.
Har du noget check på hvilken IP-adresse brugeren kommer fra? Dette kunne i det mindste låse brugeren lidt mere (hvis ellers det er en acceptabel løsning...
Ja, det var så helt hen i tågen det jeg gik i gang med :)
Min idé var at smide alle bruger sessions over i et array, hvorefter jeg ville tjecke på, om brugeren fandte i array'et når han prøvede at logge ind - Men så kom jeg i tanke om (ja, klokken er ved at være mange) at grunden til at jeg gik væk fra idéen med sessions i første omgang var, at lukker man browseren ned, går der til TimeOut før at session'en bliver "nakket" :( - Back to square one...
Jeg har svært ved at se hvordan du skal checke om en bruger stadig er på, hvis denne bruger ikke "giver lyd" fra sig. Den afkoblede natur af et website sætter vel disse begrænsninger...
Jeg kan ikke helt gennemskue hvor stramt du vil styre dine brugere, men jeg ville selv gå efter metoden med at logge brugeren af den eksisterende session, hvis denne forespørger med en ny session. Det er den eneste metode jeg lige kan se, som nogenlunde lever op til kravet om at en bruger ikke må være logget på mere end een gang og ikke belaster serveren mere end allerhøjst nødvendigt...
Problemet er, at vi har en del "store" downloads, som er blevet publiseret på nogle fora - Det betød så at vi lige fik en ekstra regning på 6000 kr :) Det er derfor, at vi meget gerne vil begrænse at brugerne ikke kan være på 2 gange med samme konto...
Hmm... jeg er bange for at jeg ikke helt kan gennemskue problemstillingen og i særdeleshed hvorfor det at en bruger kan være på flere gange er et problem ifht. downloadbelastning (hvis ellers det er det der er problemet :)). Hvis tingene ligger på et forum (eller flere) kan det vel downloades af flere forskellige brugere og hvordan hjælper det så at begrænse een bruger i at logge på flere gange...?
Men det er ikke noget du skal bruge energi på at forklare, hvis du ikke føler det giver dig noget at jeg "brainstormer" sammen med dig :) - jeg vil dog gerne hjælpe i det omfang du kan forklare mig sammenhængene og hvad det helt præcis er du forsøger at opnå i relation til begrænsning af brugere båndbredde osv...
Nu siger jeg godt nok download, men kan lige så godt lægge kortene på bordet, og sige at det er "streaming" af wmv filer hvilket kører op imod en Windows Media Server. Som tingene ser ud nu, kan brugerne logge ind, hente strengen til filen, og poste den på et forum et sted. Vi arbejder kraftig på at lave noget sikkerhed på vores Media Server, men du ville blive forundret hvis du vidste hvor lidt mennesker, og hvor lidt software, der er til rådighed på dette område...
Så det eneste vi kan gøre til at starte med, er at gribe fat om roden, og så begrænse mulighederne for at komme "ind" - Så arbejder vi sideløbende med sikkerheden omkring media serveren :) Hvis du forresten kender nogle specialister omkring Media Server sikkerhed, må du meget gerne sige til :)
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.