Just nu i M3-nätverket
Gå till innehåll

Flera sessions?


sudd

Rekommendera Poster

Ger det någon prestandaförsämring med flera sessions på en sida? Skall man försöka hålla sig till så få sessions som möjligt? Har nämligen en sida som har känts lite seg då jag införde tre nya sessions då en användare loggar in.

 

Tacksam för all hjälp jag kan få, hoppas ni har det bra i vinterkylan!

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Antar att du menar sessionsvariabler?

 

Det beror på vad du har i dina sessionsvariabler. Stoppar du där in objekt så ska du tänka om/göra om sidan. Objekt ska inte lagras i sessionsvariabler, eftersom det kommer att tvinga in all kod i samma tråd, vilket gör att man inte utnyttjar att IIS är multitrådad.

 

IIS inbyggda sessionshantering i sig är vid många samtidiga besökare en minnes-ätare. Varje gång en ny session skapas allokeras minne för sessionobjektet och sessionobjektet skapas. Det gör att IIS både snor mera minne och ger CPU:n mer att göra.

Normalt sett behöver man inte oroa sig över att använda IIS inbyggda sessionshantering. Men om man har en sajt med ett par hundra samtidiga användare ska man nog fundera över att skapa en egen sessionshantering istället för att använda den inbyggda.

 

Antalet variabler borde som sagt inte spela särskilt stor roll. Varje variabel upptar (minst) 1024bytes. Men det krävs en hel del samtidiga användare innan detta skapar ett problem.

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Tack Magnus för svaret! Det är faktiskt en sida med flera hundra online samtidigt, jag antar att det är heeemskt komplicerat att göra en egen sessionhantering? Men å andra sidan så fungerar det som det är nu.

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Ger mig in lite i den här debatten ;o)

 

Har egentligen inga svar, men en del frågor..

 

Har också en "portal" där många samtidiga besökare vistas. Det som jag lagrar i sessionvariabler är MedlemsID, om de är Admin och lite andra småsaker. Tycker det är smidigt istället för att anropa databaser varje gång man skall hämta ut om de är admin tex.

 

Har även connectionsträngar etc i sessionvariabler, men funderar på att lägga in dem i en include istället och infoga den på alla sidor där connections behöver skapas.

Bra eller dåligt?

 

Mvh Fredrik

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Tjena,

 

egen sessionshantering:

I teorin är det mycket enkelt, en databastabell innehållande sessionsID, variabelnamn och variabelvärde.

SessionID lagras som en cookie hos användaren. Här kommer det bökiga - det går inte för sig att bara lagra en cookie, eftersom det gör att din sajt blir hack-osäker. Vem som helst kan testa sig fram med att lagra olika värden i en cookie lokalt på sin dator.

Vad jag har gjort är att skapa ett sessionID som är någorlunda slumpmässigt (använder newid() i SQL-server). Detta krypterar jag mycket enkelt m.h.a. IP-numret från användaren som nyckel.

När en användare besöker en sida kollar jag:

Finns sessionID-cookien?

Dekrypterar m.h.a. användarens IP-address. Finns det dekrypterade sessionsID:t i databasen? Om ja - användaren är inloggad. Läser då ut all info från session-tabellen till en collection som jag har i mitt egenbyggda sessionobjekt.

Sist på varje sida stoppar jag in de värden som är nya eller ändrade i databasen igen.

 

Systemet har sina brister. Ex.vis om användaren sitter bakom ett proxy-kluster och IP-addressen ändras från sida till sida. Det har jag inte löst. Men det finns säkerligen andra sätt att lösa krypteringen på.

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

www.essential.se

Att lagra information om huruvida den inloggade är admin eller inte i en Session verkar inte så bra. Den lagras i en cookie (förutsätter att du kör klassisk ASP) lokalt på klientdatorn, och kan därför relativt enkelt editeras.

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Nej, det gör den inte.

Ett scramblat SessionID lagras på klientdatorn. Innehållet i sessionsobjektet lagras på servern.

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Hej.

 

Så du tycker att jag lugnt och säkert kan lagra huruvida de är admins eller inte i sessionobjektet?

 

Typ såhär:

session("Admin") = "jajjemensan" ;)

 

Tack på förhand!

 

Mvh Fredrik

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Ja. Mig veterligen är det inte utan riktigt stora uppoffringar möjligt att "stjäla" sessioner i IIS. Och eftersom en session time:ar ut efter 20 minuter (default) av inaktivitet känns det helt säkert att använda sig av sessions-variabler för ändamålet.

 

--

En röst talade till mig och sade:

”Le och var glad, ty det kunde vara värre”.

Så jag log, och jag var glad.

Och det blev värre.

 

Länk till kommentar
Dela på andra webbplatser

Tackar! :)

 

Då kan jag sova lugnt. Tror inte nån lägger ned så stora resurser för att försöka bli admin på en privat sida ;) *hehe*.

 

Hade dock ett annat problem med siten, med global.asa och session_onend. Postade det dock i en annan tråd :)

 

Tack!

 

Mvh Fredrik

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...