13 messaggi dal 04 gennaio 2012
Salve,
ho un problema. Sto riscrivendo l'area riservata del sito della mia azienda che è stata precedentemente scritta con ASP classico. La nuova versione che sto scrivendo invece utilizza il framework .Net 4.0 e dovrà gradualmente sostituire la vecchia.

La nuova area riservata risiede come percorso fisico allo stesso livello di quella pubblica, mentre come percorso virtuale è una sua sottodirectory, configurata come un'applicazione separata. Entrambe girano nello stesso Application Pool, mentre ovviamente la vecchia applicazione utilizza un differente pool.

Per condividere le variabili di sessione in entrambe le applicazioni, ho impostato la gestione delle sessioni su sqlserver. E tutto questo funziona correttamente.

Nella nuova area riservata ho utilizzato la forms authentication di .net, mentre la vecchia area eseguiva solo un controllo sulle variabili di sessione in ogni pagina ed in caso queste non ci fossero eseguiva un redirect su una pagina di login. Per avere un unica autenticazione, poichè le sessioni risultano essere differenti, ho utilizzato un secondo cookie in aggiunta a quello della formsAuthentication contenente le informazioni necessarie alla vecchia applicazione, ho poi modificato la pagina di login in modo tale da leggere il cookie e trasferirne i dati in sessione, in modo da non dover modificare tutte le vecchie pagine .asp

Anche questo funziona correttamente. Il problema sorge al momento del logout: per uscire da entrambe le applicazioni (vecchia e nuova) eseguo il signOut() della formsAuthentication, rimuovo entrambi i cookie, e dovrei chiamare la session.Abandon() sull'applicazione asp classica, ma non so come fare rimanendo all'interno del mio metodo .net

Mi spiego meglio: ho scritto una stupidissima pagina logout.asp che esegue solo la session.Abandon(), adesso vorrei richiamarla nel metodo logout della mia pagina aspx senza però effettuare un redirect, ma continuando l'esecuzione del mio metodo .net
Ho provato ad usare la Server.Execute("/private/logout.asp") e mi va in errore, ho provato anche con Server.TransferRequest("/private/logout.asp") e sembra funzionare (non ho verificato se la sessione asp classico sia stata realmente interrotta) però viene di sicuro interrotta quella corrente (.net)

Vorrei quindi un consiglio su come terminare SOLO la sessione della vecchia applicazione asp senza interrompere quella .net

Ringrazio anticipatamente
molto più semplice: proteggi tutto utilizzando Forms Authentication di ASP.NET. se hai almeno IIS 7 è facile

senza, se non ti servono info aggiuntive, puoi seguire questi consigli che valgono a prescindere.
Modificato da Daniele Bochicchio il 06 giugno 2013 15.17 -

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
13 messaggi dal 04 gennaio 2012
Innanzitutto ti ringrazio per la risposta,
il problema è che la vecchia applicazione dispone già di un sistema di protezione e poichè deve essere rimpiazzata dalla nuova non ci voglio perdere tempo in ulteriori modifiche. Oltretutto è stata sviluppata seguendo l'esatto opposto dei principi di buonsenso informatico, ad esempio il principio del riuso del codice è stato sostituito da quello della ridondanza, per cui per ogni tipo di profilo utente (e ce ne sono ben 8) è stata creata una copia dell'intera applicazione, quindi mi ritroverei a dover modificare centinaia di pagine visto che il controllo sull'autenticazione è stato fatto per ogni pagina.
Il sistema di autenticazione l'ho risolto, l'unica cosa che mi manca è il logout, devo solo eseguire il session abandon nella vecchia applicazione asp, mi dispiacerebbe dover cambiare strada solo per questo piccolo problema.
Se facessi una chiamata ajax a una pagina asp che fa pulizia della sessione? Altrimenti mi sa che devi modificare l'asp originale...

Ormai programmano tutti... ma la professionalità appartiene a pochi
13 messaggi dal 04 gennaio 2012
Grazie anche a te Manuel,
Io stavo eseguendo la procedura lato server, quindi volevo richiamare tale pagina asp nello stesso metodo di logout del codebehind.
e allora quando fai logout passa prima per la pagina ASP, che poi rimanda a quella ASP.NET. oppure usa una chiamata AJAX, un'immagine o qualsiasi altra cosa.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

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.