#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