25. februar 2005 - 18:21Der er
20 kommentarer og 1 løsning
afslutte session
hvordan kan man sikre sig at sessioner dør når bruger lukker browser?? jeg har flere gange været ude for at sessioner forbliver levende (også efter de 20min som vist er default!!)
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
Det kan du ikke - Det er rimeligt generelt problem med web-udvikling. Du kan omgå det via noget javascript så vidt jeg husker. Problemet er, at session'en kører på serveren, men serveren registrere ikke når en bruger lukker sin browser ned.
Hvis nogen har et ultra godt forslag, lytter jeg også lige med :)
Nej, det er ikke mystisk - En session er pr. default sat til at "dø" efter 20 minutter - Den lever på serveren, og ikke på klientens side. Serveren kan bare ikke finde ud af at brugeren lukker for den. En lidt træls bug fra MS's side...
Men er det så ikke bare noget med at sørge for at køre et script der hedder noget i retning af session("minSession") = "" til sidst, hvis man ønsker oplysninger utilgængelige?
Check om den side brugeren sidst har besøgt er fra sitet(Request.servervariables("HTTP_REFERER")). Hvis det ikke er tilfældet, eller den f.eks er tom: Brug Session.Abandon(); som tømmer session-objectet.
Request.ServerVariables("HTTP_REFERER") returnerer den url som har ledt brugeren til lige netop din side. Hvis den ikke er en del af dit site... Så smid hans session ud.
string url = Request.ServerVariables("HTTP_REFERER"); if (!url.Contains("http://www.ditsite.dk")) Session.Abandon();
Det er ikke testet, så tilgiv hvis der er fejl, men du kan se ideen.
Session.Abandon nakker den nuværende session for den nuværende bruger - Hvad får du ud af at ødelægge den nuværende brugers session ? Problemet er jo, at der står en tom session og ikke er lukket, kan ikke helt se idéen i forslaget der...
Problemet ligger vel i at den forladte session ikke er tom, og at brugeren kan genoptage brugen af denne hvis han vender tilbage inden de 20 minutter er gået.
Ved at give brugerer som kommer udefra en ny session, sørger man for at det kun er brugere som bevæger sig rundt i sitet som kan genbruge sessionen.
Det vil løse det beskrevne problem som jeg ser det - hvis ikke så må du specificere. Med mindre en session er enormt stor, er det klart det bedste blot at lade serveren rydde op.
Man kan ikke opdage at brugeren lukker sin browser, men se om han har brugt netop denne instans af en browser til at browse dit site.
problemet er ikke at bruger kan vende tilbage inden 20 min, men derimod at levende sessioner (som skulle dø efter 20 min) belaster min server fordi de forbliver levende i op til 2 timer... det er et site med op til 50.000 besøgende hver dag....
Hvad med at skifte spor, og gemme dine session-data i SQL Server i stedet. Det skulle kunne skære kraftigt ned på størrelsen på sessionobjekterne, da alt du gemmer i den er et id. Samtidig kunne det muliggøre evt. fremtidigt skift til f.eks. en webfarm, som du burde overveje med 50.000 daglige besøgende..
ronja7>> at skifte til sql skærer på ingen måde ned på størrelsen af objecterne, da de nu skal serialiseres ned i databasen. Det tager også meget længere tid at gemme og hente session-data en hvis det kører InProc
heloo>> put nogle flere ram i serveren, eller overvej om i kan skære ned på brugen af session-objectet. Evt. ved at putte noget af det i Cache istedet, eller nedsætte Timout
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.