Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    28

    Leggere una classe salvata in Session

    Ciao a tutti,
    avrei un problema forse stupido, ma non ho trovato riferimenti né sul forum né, tantomeno, su internet.
    Come da titolo vorrei leggere l'istanza di un oggetto che ho memorizzato precedentemente in una sessione. Sto usando vbscript in asp.

    Faccio un esempio semplice in due pagine:

    test.asp
    codice:
    Class Persona
    	Private prNome
    	Private prLavoro
    
    	Public Property Let Nome(strNome)
    		prNome = strNome
    	End Property
    
    	Public Property Get Nome()
    		Nome = prNome
    	End Property
    
    	Public Property Let Lavoro(strLavoro)
    		prLavoro = strLavoro
    	End Property
    
    	Public Property Get Lavoro()
    		Lavoro = prLavoro
    	End Property
    
    'costruttore
    	Private Sub Class_Initialize()
    		Nome = ""
    		Lavoro = ""
    	End Sub
    
    'distruttore
    	Private Sub Class_Terminate()
    
    	End Sub
    
    End Class
    Dim pers
    pers = new Persona
    With pers
    	.Nome = "ciccio"
    	.Lavoro = "impiegato"
    End With
    Set Session("Soggetto") = pers
    poi reindirizzo e mi trovo alla pagina

    test2.asp
    codice:
    Dim sogg
    Set sogg = Session("Soggetto")
    Response.Write(sogg.Nome & " è " & sogg.Lavoro)
    se il codice di test2.asp lo metto a piede della pagina test.asp mi esce l'esito come desidero (ciccio è impiegato), in test2.asp, invece, mi segnala errore
    codice:
    Errore di run-time di Microsoft VBScript error '800a01b6' 
    
    Proprietà o metodo non supportati dall'oggetto: 'Nome' 
    
    /testarea/asptest2.asp, riga 4
    cos devo fare affinché anche in pagina 2 mi esca l'esito richiesto? E soprattutto, è possibile richiamare come desidero?
    "Si pronuncia Aigor"
    "Ma mi avevano detto Igor"
    "beh, avevano torto, non le pare?"

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    28
    Per chiunque avesse lo stesso problema, ho trovato risposta in alcune pagine in inglese.
    La risposta è che non si può memorizzare una istanza in sessione per riutilizzarla in un'altra pagina.
    Gli unici oggetti che si possono salvare in sessione, mi pare di aver capito, sono il recordset e la connessione, ma questo è comunque sconsigliato poiché implica un calo in termini di prestazioni.
    Grazie comunque per l'attenzione
    "Si pronuncia Aigor"
    "Ma mi avevano detto Igor"
    "beh, avevano torto, non le pare?"

  3. #3
    fatti un metodo toString della classe e una factory da cui caricare la classe leggendo la sessione.

    codice:
    class MiaClasseFactory
    
        'return MiaClasse Instance stored in session
        public function getFromSession()
        
        'save MiaClasse Instance in session
        public function storeInSession(ref miaclasseobj)
            Session(chiave) = miaclasseobj.ToString()
       end function
    
    end class
    e

    codice:
    class MiaClasse
    
        private variable1
        public variable2
        private variable3
    
        ..
        ..
    
        public function ToString()
            
            ToString= "variable1=" & variable1 & "&variable2=" & variable2...
        end function
    
    end class

    salut
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    28
    Ciao,
    scusa il ritardo nella risposta...
    Ti ringrazio infinitamente per il metodo suggeritomi.
    Dimmi se ho capito bene il meccanismo:
    faccio tutto ciò che devo fare con la mia classe all'interno della prima pagina e, comunque, ne salvo una sorta di immagine in formato stringa anche in una variabile che memorizzerò in sessione;
    successivamente, nella seconda pagina, richiamo la sessione contenente la stringa e, attraverso una funzione riporto i parametri in una nuova istanza.

    Se ho capito bene, dunque, vuol dire che se dovessi apportare una modifica ad un valore durante la navigazione (ipotizziamo il pannello di modifica dei dati) devo nuovamente effettuare una conversione da istanza a stringa e andare a sovrascrivere la sessione?

    Grazie mille per l'interessamento.
    "Si pronuncia Aigor"
    "Ma mi avevano detto Igor"
    "beh, avevano torto, non le pare?"

  5. #5
    Ogni inizio pagina ricaricati l'oggetto salvato in Session ripopolandolo con i valori che ti sei salvato in formato stringa.. poi nella tua pagina andrai a modificare i valori dell'oggetto (ad esempio), e a fine pagina risalvi tutto in session (o successivamente alla modifica dei valori, dipende dalla logica della tua pagina)

    Comunque credo che sia un metodo efficace solo se non sono troppi valori da salvare. Insomma, non sovraccaricare la Session




    ps: provo a scrivere un esempio senza testarlo:

    codice:
    
    class Utente
    
       public nome
       public cognome
       public indirizzo
    
    end class
    
    
    class UtenteFactory
    
    
         public function loadFromSession(str) 'str:  nome=Mario&cognome=Rossi&indirizzo=via%20miavia%20,12
    
              set utente= new Utente
             
              arr=split(str,"&")
    
              foreach couple in arr
                     arrCouple=split(couple, "=")
                     execute "utente." & couple(0) & "=" & couple(1)
              next
        
              set loadFromSession=utente
        end function
    
    end class

    volendo, la logica di istanziamento utente la puoi mettere direttamente nell'oggetto utente senza passare da una factory. Se ti vedi però come si fanno funzioni statiche in VB, puoi fare una factory a funzioni statiche che salvi l'utente in session e lo recuperi poi dalla session
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.