Avatar billede EveryMA Mester
14. juli 2011 - 00:23 Der er 10 kommentarer og
1 løsning

Session udløber

Hej.
Jeg har oplevet flere gange at mine brugere kan sende breve til hinanden igennem mit system, men afsenderen står som tom.

Dvs. hvis man logger ind med brugeren "Knud" og man finder en profil man vil sende et brev til, så hvis brevet er langt, og man ikke er "aktiv" på siden imens, så udløber ens session - på den måde sendes brevet med ingen afsender, da brugernavet er lig med "".
Selvfølgelig kan man lave et tjek og sige: Du skal lige logge ind igen, eller du kan ikke sende fordi du ikke er logget ind - men hvorfor udløber den?
Kan man ikke gøre så den holder evigt?

Problemet er at man ikke aktiver nogen asp-sider undervejs mens man skriver brevet, det er i et ganske almindeligt input-felt, og derfor står jeg uden nogen idéer.
Avatar billede keysersoze Guru
14. juli 2011 - 07:53 #1
en standard session holder i 20 minutter - skal den holde længere skal der være en form for aktivitet, fx en iframe der refreshed hvert minut, eller du kan prøve at forlænge tiden gennem session.timeout.

ligger du på en billig og derfor ofte meget belastet server er der stor risiko for at ingen af disse ting vil virker og så er du nødt til at finde på alternative ting, fx gemme brugernavn eller en form for token i fx et hidden felt, adresselinjen eller en cookie til at holde styr på det.
Avatar billede softspot Forsker
14. juli 2011 - 08:49 #2
...eller bruge databasen til at gemme session i.
Avatar billede softspot Forsker
14. juli 2011 - 09:03 #3
Avatar billede EveryMA Mester
14. juli 2011 - 16:05 #4
keysersoze

Jeg har forsøgt din idé, og det virker jo ganske udmærket.
På den side hvor input-feltet er i, har jeg lagt en skjult input med navnet i. Det kan dog udnyttes så man tilføjer noget igennem en andens navn, hvis man opdager den skjulte boks i kildekoden.

Gemme session i databasen?
Man skifter side - det registreres i databasen (Ip, brugernavn)
Når man så tilføjer og ens session er udløbet, så tjekker den op i databasen via. ip og hvilket brugernavn det var - på den mådE? :)
Avatar billede softspot Forsker
14. juli 2011 - 18:24 #5
Ja, i korte træk er det et spørgsmål om at gemme en entydig nøgle i en cookie som sendes frem og tilbage mellem klienten og serveren.

Denne nøgle binder du sessionoplysninger op på i databasen, således du til hver en tid kan aflæse hvilke værdier brugeren har liggende i session - i princippet uden du behøver et sessionobjekt.

Dette system kan stadig snydes, hvis man kan få fat i en anden brugers cookie, men IP-adresser og useragents kan også spoofes, så det er ikke mere sikkert at basere nøglen på disse...
Avatar billede EveryMA Mester
19. juli 2011 - 11:40 #6
Jeg har brugt en hidden input siden dit første indlæg, og det har fungeret fint indtil videre :)
Smid svar
Avatar billede keysersoze Guru
19. juli 2011 - 20:43 #7
Du overvejede slet ikke en form for keep-alive funktion - fx bare noget javascript der kalder en asp-side?
Avatar billede softspot Forsker
19. juli 2011 - 22:46 #8
Jeg ved godt det muligvis er overkill, men en keep-alive er ikke nok til at sikre, at session eksisterer når formularen sendes til serveren. Session kan være "revet ned" af andre årsager end timeout.

Derfor vil jeg stadig anbefale at du vedligeholder en entydig nøgle, som sendes frem og tilbage i en cookie via hvilken brugeren kan identificeres på serveren. Det er umiddelbart også bedre end et formfelt, da formfeltløsningen jo kræver en formular for at fungerer :-) Cookieløsingen er generelt anvendelig til at undgå sessions.
Avatar billede EveryMA Mester
19. juli 2011 - 23:01 #9
Hmm...
Når man åbner siden hvor formularen kommer, så generer den en cookie med brugernavnet.
Når så man klikker på knappen som gør formular-indholdet bliver tilføjet til databasen, så åbner den denne cookie, hiver brugernavnet ud og sletter den cookie igen - er det ikke sådan det skal forstås?

Keysersoze - Det med javascript kan vel også "udgå" hvis der går for lang tid? Eller hvis serveren, internetten eller en anden form for forbindelse lige hopper af i 1 sekundt mens man bruger flere minutter på at skrive et brev/etc. ?
Avatar billede softspot Forsker
19. juli 2011 - 23:24 #10
Det skal fungerer således:

Ved request til server:

hvis en cookienøgle ikke fundes, så 
    log brugeren på

    opret en cookienøgle

    gem data om brugeren i db sammen med cookienøglen,
    f.eks. i en tabel der ser såleds ud:

    brugerdata =
          cookienøgle +
          feltnavn +
          værdi

    Konkret dataeksempel:
        cookienøgle = 34¤J#¤Kh#4l23kj
        navn = "brugernavn"
        værdi = "Ulla"

    gem cookienøglen i response.cookies

slut hvis

hent brugernavn fra databasen på grundlag af cookienøglen, dvs.
noget i stil med cookiedata.hent("brugernavn") som slår op i
brugerdata med cookienøglen og feltnavnet som kriterier.

Eksempelvis:

    select værdi
    from brugerdata
    where cookienøgle = <cookienøgle>
        and navn = <feltnavn>

benyt brugernavn (som returneres i feltet "værdi" i
ovenstående database-query)
Avatar billede softspot Forsker
19. juli 2011 - 23:30 #11
Der er som sådan ikke noget i vejen med at bruge det indbyggede sessionobjekt som cache, så du slipper for at slå op i databasen hver eneste gang du skal bruge en session-oplysninger. Du besværliggør dog udskalering til webgardening eller webfarming, da du pålægger digselv en synkroniseringsopgave mellem session i de enkelte workerprocesser. Til et mindre site kan det dog godt bruges.

Metoden ville så skulle startes med at tjekke for eksistens af data i session inden ovenstående trin (i indlæg #10) gennemløbes. Hvis der eksisterer data i session benyttes disse blot og opslag i databasen undlades. Dette burde booste performance noget i og med din database spares for aktivering... :-)
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