Avatar billede obhat Nybegynder
10. august 2005 - 11:33 Der er 34 kommentarer og
2 løsninger

Problemer med session

Hvordan kan jeg sikre mig at en bruger kun kan få lov til at køre en session også selvom der åbnes en ny browser?

Jeg har forsøgt med:
<%
if session ("email") <> "" then
response.write ("Du er allerede logget ind")
else
response.redirect ("login.asp")
end if
%>

Det virker kun i samme browser, åbnes der en ny logger brugeren ind igen.
Jeg giver 200 points for en løsning.
Avatar billede hingebjerg Nybegynder
10. august 2005 - 12:04 #1
kan du ikke bare sende brugeren videre til siden, hvis han allerede er logget ind??

if session("email") <> "" then
response.redirect ("index.asp")
else
response.redirect ("login.asp")
end if

HH
Avatar billede obhat Nybegynder
10. august 2005 - 12:09 #2
Nej, kun hvis det er i samme browser at bruger forsøger nyt login, ikke hvis der er åbnet en ny browser, session må åbenbart ikke eksisterer der???
Avatar billede hingebjerg Nybegynder
10. august 2005 - 12:14 #3
session forsviner ikke bare ved at brugeren lukker browseren ne. Derfor vil sessin stadig være der når han åbner et nyt browser vindue. Derfor kan du så tjekke om han har noget i hans session, og hvis han har, så er han logget ind og dermed sende ham videre til den side han nu skal, og ikke til login siden.
Sådan gør det kode jeg har skrevet ovenover.

eller har jeg misforstået?

HH
Avatar billede obhat Nybegynder
10. august 2005 - 12:16 #4
Det troede jeg nemlig også, men det virker bare ikke.
Avatar billede -mundi- Nybegynder
10. august 2005 - 12:30 #5
Hvis du åbner en Browser f.eks Internet Explorer og går ind på dit site oprettes der en session til dig. Hvis du klikker på et link på dit site som åbner f.eks et forum i et nyt vindue, er det stadig samme session. Hvis du åbner en ny Internet explorer og går ind på dit website, så oprettes der en ny session.
Avatar billede obhat Nybegynder
10. august 2005 - 12:35 #6
Ja præcis ved ny Internet Explorer oprettes en ny session.
Dvs. man kan ikke sikre sig mod flere login på nogen måde, eller?
Avatar billede -mundi- Nybegynder
10. august 2005 - 12:37 #7
Du kan evt lægge brugernavn og kodeord i en cookie og så på den måde lave et "autologin". Men der er jo brugere som ikke vil acceptere cookies, og så er der jo også et sikkerhedsissue der
Avatar billede busschou Praktikant
10. august 2005 - 12:40 #8
Hvorfor ønsker du at man ikke må have to browsere åbne?
Du kan løse det ved at sætte brugeren online og offline enten i en cookie eller database
Avatar billede busschou Praktikant
10. august 2005 - 12:44 #9
Jeg forstår ikke hvad du vil opnå
1)
Hvis jeg i min FF laver en ny tab med eksperten her, ja så har jeg to vinduer i samme session
2)
Hvis jeg åbner en helt ny IE og går ind på eksperten så beder den mig logge på
--
i version et har jeg to vinduer i een og samme session
i version to har jeg to vinduer i hver sin session
--
version et kan ikke forhindres, så hvorfor forhindre version to som i principper er næsten det samme?
Avatar billede obhat Nybegynder
10. august 2005 - 12:45 #10
Jeg har autologin på med cookies, men jeg tror >> busschou har fat i noget at det rigtige, men hvordan gør man det?
Avatar billede obhat Nybegynder
10. august 2005 - 12:47 #11
Der er flere ting jeg vil opnå, blandt andet at jeg har en online brugerliste, jeg kan regne nogenlunde med og dels misbrug af dobbelt konfekt ved brugerfunktioner
Avatar billede busschou Praktikant
10. august 2005 - 12:47 #12
Du kan ved login opdatere din database
Update brugere Set online = True Where bruger = ib
Og når brugeren logger ud så
Update brugere Set online = False Where bruger = ib
--
Når en bruger logger ind kan du tjekke
set rs = conn.execute("select * From brugere where bruger = ib")
if rs("online") then
  response.write "fejl du er allerede logget ind
else
  login
end
Avatar billede busschou Praktikant
10. august 2005 - 12:49 #13
der er kun et eneste problem, og det er at du kan ikke stole på at brugeren logger ud
derfor skal du kode det i global.asa
se evt
http://www.eksperten.dk/artikler/752
der er så igen kun et problem, og det er at det stadig ikke er 110% sikkert at brugeren registrerest som logget ud
Med andre ord risikerer du at spærre så en bruger aldrig kan logge ind :o/
Avatar billede obhat Nybegynder
10. august 2005 - 12:49 #14
Det er fint nok, men hvad så hvis en bruger bare lukker browseren, så bliver brugeren hængende og kan ikke logge ind igen.
Avatar billede busschou Praktikant
10. august 2005 - 12:50 #15
det er derfor du skal kode det i global.asa, så registreres det når sessionen dør, efter ti eller tyve minutter eller hvad du nu har sat session.timeout til :o)
Avatar billede busschou Praktikant
10. august 2005 - 12:52 #16
det med din brugerliste, hvis hver bruger kun står i den een gang, så gør det jo ikke noget man logger ind tyve gange, man står stadig kun online een gang :o)
Avatar billede obhat Nybegynder
10. august 2005 - 12:53 #17
Det er korrekt, men listen viser alle login, så en bruger står tit dobbelt
Avatar billede busschou Praktikant
10. august 2005 - 12:56 #18
Det er jo så upraktisk kan jeg godt se, hvis det kun er derfor så ville jeg lave det om så man kun står der een gang
Ellers kan du kode det i global.asa
Jeg har ingen statestik over hvor mange gange session_onend fejler i at bliver kørt, ved bare at det kan ske
Men du kan jo så evt kode den til at sætte alle offline efter fx 24 timer
Avatar billede obhat Nybegynder
10. august 2005 - 12:58 #19
Det var også en mulighed.
Tænkte også på at smide denne her i en iframe:

<body onunload="java script:DoLogout();">
Avatar billede busschou Praktikant
10. august 2005 - 13:01 #20
tja, men kører den? ;o) hehe
Avatar billede busschou Praktikant
10. august 2005 - 13:02 #21
det er jo javascript, og hvis du skal logge en ud skal du have fat i serveren
Men javascriptet kører på klienten
Så det kan du ikke
Du kan i IE benytte UnBeforeUnload
Men det er _kun_ IE :o)
Avatar billede obhat Nybegynder
10. august 2005 - 13:11 #22
Jeg kalder så den her:

<script language="JavaScript">
<!--

function DoLogout() {
window.open('dologout.asp' ,'', 'width=25 height=25');
}

//-->
</script>
Avatar billede busschou Praktikant
10. august 2005 - 13:17 #23
ok hvis du er tilfreds med den
Men kan du
1) regne med at den åbner vinduet?
2) regne med at folks popup spærrer ikke sørger for den ikke er der
3) regne med den åbner hvis man ikke har javascript

Det kommer med andre ord an på hvor vigtig det er for dig at man ikke må åbne to vinduer
Hvis det er meget vigtig så vil jeg ikke mene den metode dur
Hvis det er knap så vigtig så er den metode måske ok, meen, så kunne den måske også undværes :o)
Avatar billede obhat Nybegynder
10. august 2005 - 13:25 #24
Du har ret, det er for usikkert, jeg vil gerne ha noget der virker optimalt også selvom det måske ikke er så vigtigt for selve driften.

Ellers skulle sætte timout på brugeren og ved login tjekke på tid for seneste login og trække eks. 2 min fra tid "Now" ?
Avatar billede busschou Praktikant
10. august 2005 - 13:29 #25
Den forstår jeg ikke helt
Men uanset hvad vil du med sådan et tjek sikkert opleve at det også generer nogen
Fx hvis man kommer til at logge ud ved en fejl, og så vil logge ind igen med det samme, så spærrer det vel også?
Avatar billede obhat Nybegynder
10. august 2005 - 13:33 #26
Så skulle man ved logud.asp sætte kolonnen 'senestelogin' minus 2 min. så ville det være løst.
Jamen ellers tak for hjælpen, jeg vil lige tænke det hele igennem...
Avatar billede busschou Praktikant
10. august 2005 - 13:38 #27
ja, men du ender stadig op med at hvis en bruger lukker vinduet med alt-f4 så registreres dette ikke
Derfor skal det stadig kodes i global.asa og du vil også komme ud for at dem som bare lukker sit vindue derfor først bliver logget ud efter standard 10min

Men ja, så kan man sige så rammer det jo trods alt kun dem som ikke logger ordentlig ud
Det kan man jo skrive i sin faq
Avatar billede obhat Nybegynder
10. august 2005 - 13:42 #28
Der har du ret, det er næsten umuligt at lave så det ikke rammer nogen.
Avatar billede busschou Praktikant
10. august 2005 - 13:45 #29
det er lige det ;o)
Du kan sætte session.timeout = 1
Så vil der maks gå et minut før man kan logge ind igen
Men omvendt betyder det også at bare man sidder og har læst en tekst på et minut og fem sekunder så er man logget ud

Der er bagsider ved alt
Den nemmeste løsning var hvis man selv kunne smide sessioner ud
Så kunne man registrere sessionsid´et og når en bruger så loggede ind igen så smed man det gamle sessionsid af
Men det kan man mig bekendt ikke, måske man kan hvis man selv har serveren, det ved jeg desværre intet om
Avatar billede obhat Nybegynder
10. august 2005 - 13:57 #30
Det var nok ellers den perfekte løsning, men det ved jeg heller ikke noget om.
Men hvis man sætter session.timeout = 1 og samtidig laver et iframe med stayonline.asp som refresher for hver 55 sek. så holdes brugeren kunstigt online...
Avatar billede busschou Praktikant
10. august 2005 - 13:59 #31
hæhæ ja det er sku ikke løgn det havde jeg ikke tænkt på
Det er da rimelig smart tænkt :o)
Avatar billede busschou Praktikant
10. august 2005 - 14:00 #32
og dog
som sagt er der ulemper ved alt
Det betyder så også at brugeren vil stå evigt online hvis vedkommende lader skærmen stå tændt
Men det er nok de færreste som ikke lukker den
Avatar billede obhat Nybegynder
10. august 2005 - 14:02 #33
Tjaa.. men jeg tror faktisk det må blive løsningen, det er nok det der kommer tættest på det perfekte.
Avatar billede busschou Praktikant
10. august 2005 - 14:05 #34
ja jeg kan ikke rigtig komme på mere i al fald :o)
Avatar billede obhat Nybegynder
10. august 2005 - 14:09 #35
Fint nok :-)
Jeg takker i al fald for hjælpen, så et svar, så er der et par points.
Avatar billede busschou Praktikant
10. august 2005 - 14:13 #36
ok det var så lidt da :o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester