118 messaggi dal 09 luglio 2007
Salve, spero che l'oggetto del post sia corretto.
Mi è stato esplicitamente chiesto in azienda di creare un modulo di autenticazione(profili,ruoli,login,sessioni,etc..) in maniera personalizzata e non usufruendo i vantaggi(se così possiamo dire) di asp.net.

Premetto che si lavora in asp.net mvc 1.0, c# 3.0 e Linq.

Io ho sempre lavorato, per quanto riguarda i progetti piccoli,medi con le tabelle di asp.net , per quanto riguarda progetti un pò più corposi ho creato il mio db personalizzato e ho esteso le mie classi dalle classi astratte di asp.net(MembershipProvider,RoleProvider, etc..).

In effetti mi ritrovo come un pesce fuor d'acqua,anche perchè mi sembra di essere tornati a programmare in PHP, il quale abbandonai volentieri per una maggiore semplicità nell'utilizzo di asp.net e della sua tecnologia.

Io ho creato le tabelle del db con la tabella Sessione dove all'interno ho messo l'id dell'utente,la scadenza, l'ipConnessione e l'idutente,relazionata alla tabella Credenziale dove c'è appunto l'idUtente.

In questo caso invece non ne hanno voluto a che sapere(e non mi trovo d'accordo..non so Voi), di conseguenza ho dovuto implementare tutto il codice, adesso mi chiedo e Vi chiedo(soprattutto) per gestire le sessioni in maniera personalizzata dovrò affidarmi al web.config, per esempio per impostare il timeout?

Spero mi possiate aiutare e spero soprattutto che sia stato chiaro.

Grazie
Mai hai creato un custom provider per le sessioni? In questo modo puoi inserire le tue configurazioni nel web.config.

Info:
http://msdn.microsoft.com/en-us/library/ms178587.aspx

Sul fondo trovi un esempio.

Ciao

Andrea Zani
Undicesimo comandamento: NON utilizzare Explorer 6
118 messaggi dal 09 luglio 2007
Ciao e grazie per il tuo intervento, ma il punto è che io non ho creato un custom provider.Ma lo devo creare? se non lo creo non posso gestire le sessioni?
E' questo che vorrei capire,l'esempio che tu mi hai postato con il link crea un custom provider nel web.config ed era quello che facevo in precedenza, ma adesso che sto creando tutto "ex novo" ne ho ancora bisogno oppure posso gestire il timeout delle sessioni anxche senza il custom provider?

Ad esempio io ho trovato un esempio su internet per la gestione del Timeout

 if (Session.IsNewSession && Request.Headers["Cookie"] != null &&
         Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0)
                    {


                        return RedirectToAction("Index", "Home");

                 }


ma sinceramente non l'ho capito, devo impostare la FormAuthentication per gestire questo codice?
Ma io non userò la FormAuthentication come classe, sarà tutto gestito normalmente senza l0'usilio delle classi di supporto di asp.net


Scusa per le innumerevoli domande...

Grazie ancora
Modificato da sanfra1976 il 29 settembre 2009 16.26 -
sanfra1976 wrote:
Ciao e grazie per il tuo intervento, ma il punto è che io non ho creato un custom provider.Ma lo devo creare? se non lo creo non posso gestire le sessioni?

Se crei un custom provider poi puoi continuare ad usare i soliti comandi per le session senza toccare una linea di codice.

Se tu nel codice con le session 'standard' scrivevi:
Session("tuodati")="micio micio bau bau"

Questa session veniva salvata in memoria. Vuoi fare in modo che le session non siano salvate in memoria ma sul tuo database? Ok, scrivi un custom provider e lo configuri come quello di default nel web.config.
Ora il comando qui sopra continuerà a funzionare, ma salverà i dati sul database utilizzando il tuo custom provider.

Comodo, no?

E' questo che vorrei capire,l'esempio che tu mi hai postato con il link crea un custom provider nel web.config ed era quello che facevo in precedenza, ma adesso che sto creando tutto "ex novo" ne ho ancora bisogno oppure posso gestire il timeout delle sessioni anxche senza il custom provider?

Ad esempio io ho trovato un esempio su internet per la gestione del Timeout

if (Session.IsNewSession && Request.Headers["Cookie"] != null && Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) {

return RedirectToAction("Index", "Home");

}

ma sinceramente non l'ho capito, devo impostare la FormAuthentication per gestire questo codice?

Per riconoscere l'utente, il server invia un cookie al browser contenente la sessionId di sessione, che non è altro che un codice univoco. Il codice qui sopra non fa altro che controllare l'esistenza di questo cookie. Se esiste c'è il redirect sulla pagina in oggetto, se non ho capito male.
Non capisco bene il tuo dubbio sul timeout. Immagino che vuoi scrivere una tua gestione del timeout. Essendo il sessionid di riconoscimento un cookie, puoi continuare ad usare l'attributo Timeout della sezione delle session nel web.config anche se usi un custom provider. Il problema è quando cancellare i dati sul database per non salvare milioni di record che non vengono più utilizzati. La cosa è facilmente risolvibile creando un trigger, per esempio, che ad ogni inserimento di una nuova session, cancella i record delle session più vecchi di n minuti/ore/giorni, oppure con un thread separato nella webapplication che periodicamente esegue la cancellazione delle session vecchie.

Ma io non userò la FormAuthentication come classe, sarà tutto gestito normalmente senza l0'usilio delle classi di supporto di asp.net

La FormsAuthentication usa anch'essa un cookie crittografato. A te, credo, non serve modificare questo comportamento. Ma le session e la formsauthentication sono due cose differenti, che hanno in comune solo il modo di riconoscere il client: cookie.

Scusa per le innumerevoli domande...

Grazie ancora

Di nulla...

Ciao

Andrea Zani
Undicesimo comandamento: NON utilizzare Explorer 6

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.
In primo piano

I più letti di oggi

Media
In evidenza
MISC