4 messaggi dal 12 marzo 2007
Ciao a tutti,
ho un problema con l'oggetto Session che mi sta dando grossi grattacapi. Cercherò di spiegare... Ho un sito che è accessibile solamente attraverso l'inserimento di Username/Password. Se mi collego al sito funziona tutto perfettamente. Ora, con il browser aperto, apro un'altra istanza del browser stesso (attenzione non un'altra scheda di IE7!) e mi ricollego al sito. Tutto ok. Se da uno dei due browser effettuo il logout, ecco che il logout si riflette inspiegabilmente (quantomeno da me!) anche nell'altra istanza del browser. Questo accade indipendentemente da quali browser io stia impiegando (provato IE6, IE7, Firefox 2). L'applicazione usa autenticazione basata su webforms con gli utenti su tabella DB (quindi creo il ticket manualmente al login). La pagina di logout rimuove il cookie di autenticazione e chiama Session.Abandon(). Solamente sembra che le variabili di sessione vengano cancellate per entrambe le sessioni. A questo punto la domanda è: a cosa è legato lo stato della sessione? E' legato all'istanza del browser o al PC client?
Ringrazio da subito tutti per la collaborazione,
Ciao...
Il logout standard offerto da asp.net ovvero basato su System.Web.Security.FormsAuthentication.SignOut rimuove il cookie di autneticazione ovvero se hai due finestre separate del browser avrai lo stesso effetto su entrambe dato che entrambe usano lo stesso cookie.
Per controllare la sessione, apri due finestre e fatti stampare a video Session.SessionID cosi' saprai se condividono la stessa sessione o meno
4 messaggi dal 12 marzo 2007
Ciao crixo,
innanzitutto grazie per la risposta!!! Premetto che credo di aver risolto - inizio in ogni caso con una nuova domanda: se apro due finestre del browser (istanze separate), quindi digito l'indirizzo del sito, il server dovrebbe dare inizio a due sessioni distinte. Infatti è così, poiché ero in grado di mantenere aperte due sessioni di utenti con diritti diversi: questo implica che il sito cambia aspetto nei colori e nei menu (preciso comunque che non sto usando il sistema di sicurezza role-based di .NET, ne uso uno mio costruito al modo del vecchio ASP con l'oggetto Session!). Il problema era durante la fase di logout, ma ho scoperto cosa succedeva... L'errore è solo mio e ci sono cascato in pieno!!! La mia applicazione definisce un oggetto .NET con una serie di routines shared che gestiscono lo stato della sessione (per il login, logout, diritti dell'utente, fogli di stile per il cambio colori, ecc...). Il problema di queste routines era proprio la loro natura shared, più precisamente il fatto che quando effettuavo il login assegnavo ad un membro shared di questa classe niente meno che l'oggetto Session. Il tutto nella convinzione (del tutto errata a questo punto!) che quella referenza shared venisse in qualche modo riallocata ad ogni inizio sessione ma... non può essere così (il server infatti non crea un nuovo processo per ogni sessione, non è così?)!!! Dunque il runtime fa sempre riferimento alla stessa area di memoria se il membro è shared. Quindi con un'istanza del browser credevo di controllare una sessione, in realtà controllavo sempre l'ultima assegnazione a quel membro shared. HO FATTO UN GROSSO ERRORE CONCETTUALE!!!
Devo dire, dunque, che lo strano comportamento era solo colpa mia!!!
Grazie ancora per la risposta!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.