22. juli 2002 - 16:34Der er
23 kommentarer og 3 løsninger
Tjek om to personer bruger samme brugernavn/adgangskode ved login
Jeg har et loginsystem og så er det jeg vil høre om der er nogen der har ideer til hvordan man kan tjekke om to personer bruger samme brugernavn/adgangskode.
Jeg har tænkt lidt på om det kan lade sig gøre at tjekke om session.sessionID skifter og hvis den så skifter tilbage til det samme igen, så må det vel betyde at to brugere bruger samme brugernavn/adgangskode. Nogen der evt. har andre ideer?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Det er en access database, hvor hver bruger har deres eget brugernavn og adgangskode og så er det jeg gerne vil gøre så det ikke er muligt for to brugere at bruger det samme brugernavn og adgangskode, hvis en person f.eks videre giver sit brugernavn og adgangskode.
>> agg-zeus
Jeg har måske ikke skrevet det præcist nok. Det er ved login at jeg gerne vil gøre, så to personer ikke benytter det samme brugernavn og adgangskode.
Normalt i de systemer jeg har set tjekker den kun om det er et gyldigt brugernavn/adgangskode man bruger ved login ikke om en anden person har benyttet samme brugernavn/adgangskode.
Så skal du på en eller anden måde gemme/logge at en bruger er online, enten ved at gemme brugerneavet i en databse eller hele tiden logge tidspunkt for hvornår en bruger fortager sig noget, og hvis der er gået mere en 10 minutter så er brugeren offline.
Det har dog nogle ulemper, hvis en bruger lukke og åber sig browser igen kan han ført logge ind ca. 10 min efter, hvis man vil åbne din side i to selvstændige browser vinduer, det kan man heller ikke.
hmm... du kunne måske tilføje er felt i DB'en der hed "status" som der blev skrevet "Online" i når den 1. bruger logger på ! og så tjekke hvad der står i dette felt! f.eks.
If Request.Form("brugernavn") = rs.fields("brugernavn") Then If rs.fields("status") = "online" Then Response.Write "Du er allerede online!" Else loginscript... End If Else Response.Write "fejl..." End If
Du tænker vel på at 2 personer ikke kan være logget ind samtidig ?
I så fald kunne det være noget med at du laver et online felt på bruger tabellen og opdaterer dette ved login/-out. Dermed kan du kontrollere for om brugeren allerede er logget ind.
Det har selvfølgelig den ulempe at hold kun kan logge på fra en bestem pc, men man kan jo ikke få alting.
Jeg ved godt at man kan ændre et netkorts mac addresse, men det er nok de færreste der gør det, og vis de gør så skal de nok finde en anden måde at komme på.
Så tror jeg ikke rigtig du får det løst, ihvertifald ikke hvis du ikke vil over i et eller andet med at hvergang en bruger vil logge på så skal han vente på at han modtager et password via mail eller sms eller lign, men to personer kan jo fint dele et brugernavn og et password til en email konto også :(
Som jeg har skrevet tidligere kan tilføje en kolonne til din bruger tabel som heller last_action eller sådan noget... Hver gang en bruger logger ind og loader en side skal man så opdater kolonnen med Dato,Tid.
Fidusen skulle så være når man forsøger at logge ind så tjekker du på om last_action er ændre end 10 minutter. Hvis kolonnen er ældre end 10 minutter definere man så at man er offline.
Hvis du har en logout knap så skal den bare sætte dato-tiden i last_action kolonnnen til now - 10 minutter så kan man logge ind med det samme igen. Ligeledes for Session_OnEnd functionen.
metoden vil bevirke at man kan resikere at skulle vendte 10 minutter før man kan logge ind igen.
Nej .. men det kan man jo aldrig sikre hvis man vil tillade man logger ind fra forskellig maskiner, det sikre dog at de ikke kan være online på samme tid.
Nu har jeg fået udarbejdet en løsning, så det virker helt som det skal. Jeg har to felter i min database et der hedder sessionID1, et der hedder sessionID2 og et der hedder active_sessionID. Ved login tjekkes indholdet af active_sessionID, som angiver om det er sessionID1 eller sessionID2 der sidst har været brugt. Brugerens aktuelle session.sessionID gemmes så i det af felter sessionID1 og sessionID2, der ikke sidst har været brugt. Hver gang en side åbnes vil det blive tjekket om brugerens session.sessionID er lig med den af sessionID1 og sessionID2 der ikke er aktiv, hvis dette er tilfældet betyder det at der er en anden person, der er logged ind med samme brugernavn.
Med denne løsning kan man sagtens logge ind lige så mange gange man vil, uden at skulle vente 10 minutter og det er kun hvis det sker på samme tid, så den samme person godt kan logge ind fra forskellige computere på forskellige tidspunkter. Det udelukker selvfølgelig ikke at to personer kan bruge samme brugernavn, hvis de logger ind på forskellige tidspunkter, det tror jeg ikke at man kan undgå, men nu kan det i hvert fald det, som det skal kunne.
I skal have tak for jeres forslag og jeg er meget taknemlig for jeres vilje til at hjælpe.
Hvis en person logger ind med samme brugernavn er det begge personer, der bliver udelukke for systemet. Vi kan ikke have nogen der videregiver deres oplysninger og at flere personer logger ind med samme brugernavn og adgangskode, sådan skal det være :)
-> kasperks : Har du testet at det virker på Internettet og ikke kun på lokal-netværket. Jeg tvivler stærkt (er 100 på) at det ikke funker på den anden side af din router.!!
Du har ikke løst dit problem!! Forskellige brugere kan som du selv skriver, logge ind på forskellige tidspunkter. Og så er det lige fedt.... Og jeg må da indrømme at jeg ikke helt kan gennemskue din løsning. Den virker frygtelig kompliceret. Men såvidt jeg kan se, så er det muligt for NETOP 2 personer at være logget ind med det samme brugernavn/password.
Hvorfor bruger du ikke bare alm. sessioner og skriver brugerne ind og ud af en login-tabel ved login og Session_OnEnd. Evt. bruger en application-variabel. For at virke optimalt kræver det selvfølgelig at folk logger ud som de skal. Ellers er der en 20 minutters ventetid.
Det virker også uden for mit lokalnetværk, jeg har testet det på internettet og det virker helt som det skal. Med min løsninger er jeg 100% sikker på at personerne kan logge ind lige så tit de har lyst, uden at de skal vente på at Session_OnEnd også selvom de ikke logger ud. Med min løsning er jeg helt sikker på ikke at udelukke personer, som ikke skal udelukkes og dem som skal udelukkes bliver udelukket. Jeg kan i øvrigt ikke se hvad application-variabel kan bruges til i denne sammenhæng.
Jeg vil også lige sige at jeg har løst mit problem, idet at nu kan to personer ikke logge ind med samme brugernavn og adgangskode på samme tid.
-> kasperks : Det er ikke for at starte diskussionen op om MAC-adresser og Internet. Men TDC kører ikke ethernet over telefonlinien. Og ifg. TDC/Zillion hjemmeside har du mindst et ASDL-modem imellem xDSL-stikket og dit netkort.
-> cht: Hvis det virker som det skal er det jo OK. Jeg vil lige kigge på din løsning en gang 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.