Introdurre un controllo generalizzato sulle variabili di sessione

giovedì 09 novembre 2006 - 00.05

squilibrio Profilo | Expert

Ciao vorrei capire se esiste un modo per introdurre un controllo, in ogni
pagina, per verificare che le variabili di sessione siano valorizzate (o
ancora attive)... in sintesi è possibile automatizzare un controllo di questo tipo da
inserire in ogni pagina, per evitare errori dovuti a :

- variabili per qualche motivo non valorizzate
- sessione scaduta

considerando che non tutte le pagine utilizzeranno le stesse variabili di sessione.

Nel caso in cui non sia possibile introdurre un controllo di questo tipo (come immagino, dato che le variabili cambiano da pagina a pagina); come potrei controllare, in modo corretto, in ogni pagina, che tutte le variabili necessarie alla pagina siano "disponibili" (intendo: in che modo e in quale evento è meglio effettuare questo controllo)

Thanks

freeteo Profilo | Guru

ciao,
purtroppo la collection Session, non è tipizzata, pero' puoi girare dentro alle sue variabili, recuperando le varie key e facendoti dare il valore, ad esempio:
Session["valore"] = 100; Session["stringa"] = "matteo"; Session["data"] = DateTime.Now; foreach (string chiave in Session.Keys) { Response.Write(chiave + " " + Session[chiave] + "<br/>"); }

Pero' se vuoi qualcosa di piu' "furbo" devi usare il Profile (http://quickstarts.asp.net/QuickStartv20/aspnet/doc/profile/default.aspx) il quale è simile alla session, solo che salva e legge i valori dal db (automaticamente per te) ma soprattutto sono accessibili in maniera tipizzata, quindi fai meno errori perche' da codice puoi accederci con ad esempio:

Profile.MioNumero + 1;

Per usarlo devi definire i campi nella sezione "Profile" del web.config, e appena compili, lui crea la classe che legge e scrive questi dati di default su Sqlexpress.

Se vuoi puoi usare anche access, prova a leggere questo mio articolo:
http://www.dotnethell.it/articles/ASP.NET2-Profile.aspx
a destra c'e' il progetto a supporto, dal quale puoi copiarti l'mdb, e l'assembly della bin "sampleprovider.dll" , e poi nel web.config gli dici di usare quello nel web.config...

A supporto c'e' anche scarica lo starterkit qui :
http://msdn.microsoft.com/vstudio/eula.aspx?id=96713a8e-b8d4-4d6e-bb8f-027e6c8e15d8
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ricky Profilo | Junior Member

Sono interessato allo stesso argomento, fino a questo momento io avevo utilizzato il Profile per aggiungere campi da gestire in fase di registrazione di un utente (quindi per avere altri campi legati all'utente nel DB di registrazione, oltre a quelli standard nome, password ecc)... tu invece consigli di utilizzarlo anche al posto (in alcuni casi) delle variabili di sessione?? Interessante ma i miei dubbi sono:

- questa soluzione è piu o meno performante delle variabili di sessione (per applicazioni con un elevato numero di utenti ma che devono passare, da una pagina all'altra, poche info... qualche variabili e non certo interi dataset)

- le variabili di sessione hanno il vantaggio di poter essere salvate su cookies, db ecc... quindi non generano alcun problema di impostazioni del browser, invece il profile salva nel DB... ci sono dei contro ai riguardo?

In sintesi vorrei capire, devo che devo riscrivere un'applicazione, quale soluzione mi conviene usare per gestire il passaggio di valori tra pagine mantenendo un alto livello di prestazioni.

Grazie

freeteo Profilo | Guru

>Sono interessato allo stesso argomento, fino a questo momento
>io avevo utilizzato il Profile per aggiungere campi da gestire
>in fase di registrazione di un utente (quindi per avere altri
>campi legati all'utente nel DB di registrazione, oltre a quelli
>standard nome, password ecc)... tu invece consigli di utilizzarlo
>anche al posto (in alcuni casi) delle variabili di sessione??
si, non è da fare con tutte le variabili, io lo consiglio principalmente se al successivo accesso le devi ricaricare, usando il profile, vengono memorizzate e ricaricate in automatico quindi non ti devi preoccupare di gestirle.
Questo pero' non è detto che serva per tutte le varibili, io spesso uso entrambe le cose all'interno della stessa webapplication


>Interessante ma i miei dubbi sono:
>
>- questa soluzione è piu o meno performante delle variabili di
>sessione (per applicazioni con un elevato numero di utenti ma
>che devono passare, da una pagina all'altra, poche info... qualche
>variabili e non certo interi dataset)
allora forse la session va meglio per te, sono pochi dati e che magari non ti interessa ricaricare al successivo accesso


>- le variabili di sessione hanno il vantaggio di poter essere
>salvate su cookies, db ecc... quindi non generano alcun problema
>di impostazioni del browser, invece il profile salva nel DB...
>ci sono dei contro ai riguardo?
ovviamente facendo query su database arai una risposta piu' lenta, pero' ne guadagni di intellisense


>In sintesi vorrei capire, devo che devo riscrivere un'applicazione,
>quale soluzione mi conviene usare per gestire il passaggio di
>valori tra pagine mantenendo un alto livello di prestazioni.
Se i dati da passare sono pochi, ti conviene usare Session.
Ricorda solo di ricaricarle dopo la login, perche' allo scadere della sessione (tipicamente dopo 20min) perche' si perdono


>Grazie
di niente, è solo 1 mio parere ma spero che ti possa tornare utile.
ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

squilibrio Profilo | Expert

Interessanti i tuoi spunti... quindi proseguirò con la strada delle var di sessione

> Se i dati da passare sono pochi, ti conviene usare Session.
> Ricorda solo di ricaricarle dopo la login, perche' allo scadere della sessione (tipicamente
> dopo 20min) perche' si perdono

In che modo?? intendo: l'utente è connesso, io sto lavorando su alcune variabili... l'utente non fa nulla per X minuti, cade la connessione.... cosa faccio?


> Ricorda solo di ricaricarle dopo la login

Esiste un modo per recupare i valori?? immagino di no...

E cmq ritorno al mio problema iniziale del post: effettuare un controllo per evitare di ottenere errori nel codice dovuti all'utilizzo, nelle pagine, di variabili di sessione non piu valide

freeteo Profilo | Guru

>In che modo?? intendo: l'utente è connesso, io sto lavorando
>su alcune variabili... l'utente non fa nulla per X minuti, cade
>la connessione.... cosa faccio?
ok come pensavo quello che ti serve allora è proprio il profile, perche allo scadere della session le perdi e se non le ricarichi da database (o altro file) non le puoi recuperare.
Percui anche se sono pochi dati, e perderai 1po di prestazioni (si parla di ms mediamente irrilevanti) devi usare il profile, perche' sessione o non sessione cmq sia, quando le richiami le hai sempre disponibili.

>
>> Ricorda solo di ricaricarle dopo la login
>
>Esiste un modo per recupare i valori?? immagino di no...
diciamo che o come ti dicevo prima usi il Profile altrimenti dovresti usare l'evento "Session_End" nel "global.asax" per salvarti i valori (magari su db) e poi nel "Session_Start" ricaricartele per quell'utente.
Solo che è 1a pratica 1po scomoda rispetto ai benefici reali che da, io rimango dell'idea di utilizzare Profile.


>E cmq ritorno al mio problema iniziale del post: effettuare un
>controllo per evitare di ottenere errori nel codice dovuti all'utilizzo,
>nelle pagine, di variabili di sessione non piu valide
In questo caso devi controllare i vari null prima di utilizzarli, per evitare errori a runtime

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ricky Profilo | Junior Member

Mi intrometto: tramite il profile definisco dei campi da usare in fase di registrazione (data nascita ecc...) che cmq mi servono solo in fase di registrazione e basta; praticamente per avere piu info sull'utente nella tabella di registrazione.

Nell'evoluzione dell'applicazione sento poi la necessità di gestire alcuni valori nei passaggi tra pagine; questi valori non servono in tutte le pagine, ma solo in particolari passaggi (per trasferire un valore presente nella pagina X-1 alla pagina X e magari alla successiva pagina X+1); anche io ho gli stessi problemi/dubbi tra sessione e profile, in questo caso è meglio usare una session o un profile?
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5