Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Sessioni persistenti
giovedì 23 maggio 2013 - 17.38
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 1.1
|
Windows XP
|
Visual Studio 2003
zizu75
Profilo
| Newbie
23
messaggi | Data Invio:
gio 23 mag 2013 - 17:38
salve, ho un problema con dei dati di un form che devo salvare in una variabile session e renderli persistenti ,cioè se chiudo il browser alla riapertura successiva devo rivedere i dati dell'ultima sessione di lavoro.Ho trovato un esempio su un libro dove c'è un contatore che si incrementa ha ogni visita della pagina , se chiudo l'applicazione riprende dall'ultimo valore e non da zero.L'esempio del libro utilizza un file XML sul server, dove viene salvato il valore della variabile session, cosi come memorizzati alla fine della richiesta precedente.Il codice legge questo file e popola la collezione Session prima che la pagina veda i nuovi valori.Il tutto funziona con il contatore ,ma io vorrei integrare la pagina con una textbox Nome,leggere il valore all'interno, visualizzarlo il una label di riepilogo e far si che pure questo valore sia leggibile al prossimo accesso (ma niente non riesco,anche se il valore viene salvato nel file XML non riesco poi a leggerlo).COME POSSO FARE???
.Il file XML viene salvato sul server in una cartella , il nome di questo file sarà il valore del cookie, che tramite l'evento AcquireRequestState di global.asax sarà letto.Se questo cookie non esiste vuol dire che è la prima richiesta di questo client e pertanto il codice crea il cookie e vi memorizza una stringa casuale.Il codice dell'evento AcquireRequestState è il seguente:
#Const SESSIONI_XML = True
#If SESSIONI_XML Then
'IMPORTANTE: creare una directory nel seguente percorso, o cambiare
'Il percorso per abbinare una directory esistente
Const SESSIONDATAPERCORSO = "C:\lavoriAspReale\ApplicazioniApsNet\DatiSessione\"
Private Sub Global_AcquireRequestState(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.AcquireRequestState
Diagnostics.Debug.WriteLine("Global_AcquireRequestState")
Dim fs As System.IO.FileStream
Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter
Try
'ottiene un particolare cookie ed esce se non lo trova
Dim cookie As HttpCookie = Request.Cookies("PermessoSessioneID")
If (cookie Is Nothing) Then
'se non lo trova ,lo genera (utilizza un sessionID pseudocasuale)
cookie = New HttpCookie("PermessoSessioneID", Session.SessionID)
'fa in modo che scadi dopo 10 miniti,nell'esempio del libro 1 settimana
cookie.Expires = Now.AddMinutes(10)
'lo invia al browser del client e termina
Response.Cookies.Add(cookie)
Exit Try
End If
'il nome del file è ugale al valore del cokie
Dim permSessioneID As String = cookie.Value
'crea il nome del file di dati
Dim nomefile As String = SESSIONDATAPERCORSO & permSessioneID.ToString & ".xml"
'apre il file ,esce in caso di errore
fs = New System.IO.FileStream(nomefile, IO.FileMode.Open)
'deserializza la tabella hash che contiene i valori
Dim ht As Hashtable = DirectCast(sf.Deserialize(fs), Hashtable)
'sposta i dati nella collezione session
Dim key As String
Session.Clear() 'azzera i valori della sessione standard
For Each key In ht.Keys
Session(key) = ht(key)
Next
Catch ex As Exception
'ignora oni eccezione
Finally
'chiude il flusso e esce
If Not (fs Is Nothing) Then fs.Close()
End Try
End Sub
'una volta elaborata la richiesta ,il codice di Global_ReleaseRequestState crea un file xml
'lato server il cui nome sara preso dal cookie PermessoSessioneID letto o creato in precedenza
'Poi serializza tutte le variabili session nel file xml e azzera la collezione session per ridurre
'al minimo l'utilizzo di memoria sul server
Private Sub Global_ReleaseRequestState(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.ReleaseRequestState
'ottiene il cookie perticolare
Dim cookie As HttpCookie = Request.Cookies("PermessoSessioneID")
'il valore del cookie è il nome del file xml
Dim permSessioneID As String = cookie.Value
'sposta i dati dalla collezione session in una hashtable
Dim ht As New Hashtable(Session.Count)
For Each key As String In Session.Keys
ht(key) = Session(key)
Next
'azzera la collezione session standard,per risparmiare memoria
Session.Clear()
Dim fs As System.IO.FileStream
Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter
Try
'crea il nome del file di dati
Dim nomefile As String = SESSIONDATAPERCORSO & permSessioneID.ToString & ".xml"
'apre il file ,esce in caso d'errore
fs = New System.IO.FileStream(nomefile, IO.FileMode.Create)
'serializza la tabella hash che contiene i valori
sf.Serialize(fs, ht)
Catch ex As Exception
'ignora oni eccezione
Finally
'chiude il flusso e esce
If Not (fs Is Nothing) Then fs.Close()
End Try
End Sub
#End If
per utilizzarlo invece nell'evento load sella pagina scrivo il seguente codice
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim nome As String
If Session("nome") Is Nothing Then
Session("nome") = "casa"
Else
Session("nome") = TextBox1.Text
Session("nome") = CStr(Session("nome"))
End If
Label3.Text = "<B>" & nome & "</b> : " & CType(Session.Item("nome"), String) & "<br>"
If Session("Contatore") Is Nothing Then
Session("Contatore") = 0
Else
Session("Contatore") = CInt(Session("Contatore")) + 1
End If
lblContatore.Text = "Contatore = " & Session("Contatore").ToString
End Sub
mexico77
Profilo
| Junior Member
96
messaggi | Data Invio:
ven 24 mag 2013 - 09:29
Scusa non ti conviene salvare direttamente tutto in un cookie a questo punto invece di fare tutto questo lavoro.
www.setteweb.it
zizu75
Profilo
| Newbie
23
messaggi | Data Invio:
ven 24 mag 2013 - 10:04
lo so ma vorrei usare questa tecnica perché mi incuriosisce e per poterla utilizzare in un carrello della spesa di un mio progetto senza utilizzare cosi sql server
zizu75
Profilo
| Newbie
23
messaggi | Data Invio:
ven 24 mag 2013 - 10:05
lo so ma vorrei usare questa tecnica perché mi incuriosisce e per poterla utilizzare in un carrello della spesa di un mio progetto senza utilizzare cosi sql server
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !