Gå til innhold

ASP.Net: Lagre objekter i Session (.Net 2.0)


Anbefalte innlegg

Har et aldri så lite spørsmål angående å lagre objekter i Session i ASP.Net. Før jeg forklarer problemet vil jeg bare nevnet at jeg ikke har alt for mye erfaring med ASP.Net og at det er stor sjanse for at jeg har gått glipp av noe grunnleggende.

 

Eksempel:

La oss si at jeg lager en webside for redigering av et personregister. All lesing og skriving til database gjennom et BLL tier som har en sett med metoder for å lese og skrive objekter av type Person.

 

public class Person
{
internal byte[] rowVersion=new byte[8]; //timestamp datatype fra SQL Server
internal int id;
public string navn;

public int Id
{
	get { return id;}
}

}

public class BLL
{
public List<Person> GetAllPersons()
{
	// Fyller og returnerer List<Person>
}

public Person GetPersonById(int Id)
{
	// returnerer Person for en gitt Id
}

public Person UpdatePerson(Person Person)
{
	// Sjekker at rowVersion er samme som i database, lagrer til database,
	// og returnerer oppdatert Person-objekt med ny rowVersion.
}
}

 

Websiden har en DataList med alle personer on en Button for edit.

Brukeren klikker edit, som viser en user control for redigering av Person data.

Siden jeg trenger rowVersion-verdien (brukes i UpdatePerson metdoen i BLL) i tidsperioden fra klikk på Edit til klikk på Save så tenkte jeg at denne kunne lagres i Page.Session propertien.

Det fungerer egentlig greit helt til brukeren trykker CTRL+N for å åpne et nytt vindu i IE; samme session, men to vinduer, og potensiet kan brukeren redigere to personer samtidig.

Da fungere det, av åpenbare årsaker, dårlig å bare lagre Person-objektet i Page.Session.

Det jeg derfor tenkte var at ved klikk på Edit så genererer jeg en unik autogenerert id (f.eks. en GUID) som jeg sammen med Person-objektet legger i en Dictionary-collection som lagres i Session.

Ved Save så henter jeg ut riktig Person-objekt basert på GUIDen fra ViewState.

Må selvfølgelig lage funksjonalitet som fjerner Person-objekter fra Session som ikke lenger behøves, men det er uviktig i denne sammenhengen.

 

Høres det ut som en grei måte å gjøre det på, eller er jeg helt på villspor. Finnes det metoder i .Net som håndterer dette på en enklere måte?

Lenke til kommentar
Videoannonse
Annonse
Jeg har selv en webapp hvor jeg lagrer en Dictionary i en Session, men hvor smart det er, vet jeg ikke. Det er store mengder data å trykke inn i en session da...

 

Takk for svar.

 

Det var første bekymringen min også, men siden objektene mine maks vil være ca 500 bytes så skal det noe til å bruke opp all RAM. Dessuten er det en applikasjon som maks skal bruker av 10 personer.

 

Andre meninger og ideer mottas med takk.

Lenke til kommentar

Mye av Session sitt dårlige rykte stammer fra gamle ASP dager.

 

500 bytes * 10 personer burde du ha nok RAM til på serveren :)

 

For litt større data og flere brukere blri det en avgjørelse avhengig av:

* RAM forbruk

VS

* Linje

VS

* Ytelse på lagringsressurser (SQL, fil, etc)

VS

* Sikkerhet

 

for å velge om man vil bruke Session, ViewState/ControlState, Cookies el. SQL/fil/etc...

Lenke til kommentar
Takk for svar Jørn.

 

Så lenge du ikke mener at måten jeg skisserte er helt på jordet så går jeg for den denne gang.

 

Eksempel ved session:

500bytes * 100.000 brukere = 50.000.000 (50MB) (++ litt overhead for objekter/etc)

 

Dette er ganske akseptalbelt minnebruk for å:

* Bedre sikkerhet (slipper å sende dataene til klienten) enn viewstate,cookies

* Bedre ytelse (slipper å lagre&hente dataene på f.eks. SQL server eller disk mellom hver request)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...