Avatar billede neoman Novice
21. maj 2007 - 14:54 Der er 5 kommentarer og
1 løsning

Gemme objekter i session ,hvordan virker det præcist ?

Jeg er blevet lidt forvirret mht til gemning af data i session.
Jeg havde oprindeligt en ide om, at hvis man gemmer et objekt i Session, så er det en kopi som gemmes. Men det lader ikke til at være tilfældet.

Har lavet et lille script til test:
        Dim a As New ArrayList

        a.Add(1)
        a.Add(2)
        a.Add(3)

        Session("a") = a

        Dim b As New ArrayList
        b = CType(Session("a"), ArrayList)
        'fjerner sidste post i b
        b.RemoveAt(b.Count - 1)

        MsgBox(a.Count)

Det sjove her er, at a.count = 2 og ej 3.

Hvad jeg ikke helt forstår er at lighedstegnet synes at have forskellig betydning, afhængig af hvad vej data går :

Session("a") = a må jo nødvendigvis gemme a's indhold, siden den kan hentes igen på en anden side. Jeg troede det ville være en kopi, men mit lille eksempel ovenover synes at pege på pointers. (og at Session("a") så lægger beslag på de data in memory som definerede a og a's indhold).

Hvordan funker det så når a bliver nedlagt efter aspx siden er blevet rendered ?

Årsagen til at jeg spørger er, at man jo kan gemme session-data forskellige steder.  Når jeg, som i mit eksempel, referer til et objekt som var blevet hentet fra session, så ser det jo udtil at det er kun en pointer som er blevet hentet, mens de ændringer jeg laver laver jeg på det oprindelige objekt. Hvis objektet så er storet i f.eks. en SQL db elsewhere, så er det jo for det første nok en smule langsommeligt, og for det andet så kan mit objekt jo forsvinde når som helst, og jeg burde derfor checke det før hver tilgang If Not ISNothing(mitobjekt).

Er jeg totalt galt afmarcheret ? Har googlet lidt, men kan ikke finde nogen aktuel og for en mig en forståelig og skåret-ud-i-pap artikel om emnet.
Avatar billede erikjacobsen Ekspert
21. maj 2007 - 15:17 #1
Det fungerer også med "pointers" - eller referencer, som man hellere vil kalde dem.

På den næste side, hvor du bruge den arraylist, bliver den oprettet påny.

"Session("a") = a må jo nødvendigvis gemme a's indhold" <- Nej, den får Session("a") til at pege på a.
Avatar billede neoman Novice
21. maj 2007 - 15:26 #2
Det kunne jeg ligesom regne ud  - men hvordan fungerer det så hvis session data er storet på en anden sql-server  ? vil HVER ændring i mit objekt medføre read/write ? eller lægger den en kopi i memory  når den bliver "oprettet" næste gang jeg skal bruge objektet på en anden side ?
Avatar billede erikjacobsen Ekspert
21. maj 2007 - 17:22 #3
Når du gemmer session data på sql-server (state-server) er de altid serialiserede, så der oprettes et helt nyt objekt på "næste" side.
Avatar billede neoman Novice
21. maj 2007 - 17:37 #4
Aha - dvs jeg arbejder altid på et objekt i hukommelsen, og hvis jeg laver ændringer i det, så bliver det så persisted i db'en når jeg lukker siden ?  Hvis dette er rigtigt, så behøver jeg jo ikke bekymre mig om hvor objektet havner henne eller hvor det kommer fra.

Hvis ovenstående er rigtigt tak for hjælpen - og læg et svar (hvis du nu skulle mangle et point eller to :-)
Avatar billede erikjacobsen Ekspert
21. maj 2007 - 18:33 #5
Jeg samler slet ikke på point, tak. Der kan stadig ske sjove ting, hvis man bruger de samme sessionsvariabler i 2 browservinduer på samme tid.
Avatar billede neoman Novice
21. maj 2007 - 23:19 #6
s
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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