43 messaggi dal 05 gennaio 2011
Ciao a tutti,
devo fare una serie di controlli in diverse pagine del sito:

ad esempio:
If Application("visibile_portale") = "False" Then Response.Redirect("offline.htm")
if Session("user") = "" then response.redirect ("login.aspx")
......

C'è un modo per centralizzare tutto il codice in qualche file e poi mettere un richiamo nella sezione page_load di ogni pagina?

In questo modo per la manutenzione dei controlli vado solo su un unico file.

Grazie
Dovresti prevedere una BasePage (che eredita da System.We.UI.Page) dalla quale ereditano le tue pagine.

Ormai programmano tutti... ma la professionalità appartiene a pochi
97 messaggi dal 15 marzo 2001
La cosa + semplice è includere lo stesso file nelle pagine interessate con
Response.WriteFile ("miofile.inc")
dove miofile.inc è ovviamente il file che comprende lo script che viene ripetuto nel page_load, nel tuo caso....

If Application("visibile_portale") = "False" Then
Response.Redirect("offline.htm")
if Session("user") = "" then response.redirect ("login.aspx")
43 messaggi dal 05 gennaio 2011
ottima soluzione molto semplice e veloce.

è praticamente quello facevo con il asp 3.0 anni fa:

<!--#include file="miofile.inc"-->

l'istruzione response.writefile non l'avevo ancora vista...

GRAZIE!!
43 messaggi dal 05 gennaio 2011
Un domanda, ma che struttura deve avere il file inc?

io in asp mettevo solo

<%
codice....

%>

ma qui sembra avere qualche problema...
help

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
il metodo Response.WriteFile non agisce come un include dell'asp classico ma si limita a leggere il contenuto di un file e a scriverlo tale e quale. Se all'interno del file avevi inserito del codice, esso non verrà elaborato.

In asp.net ancora esiste l'include così come lo usavi in asp classico ma ormai, all'atto pratico, non si usa più perché ci sono alternative migliori di cui l'asp classico non disponeva.

Tu hai presentato due esigenze: quella di mettere l'applicazione offline secondo necessità, e quella di reindirizzare l'utente non autenticato ad una pagina di login.

Il primo quesito si risolve in poco tempo. Asp.net controlla la presenza di un file speciale chiamato app_offline.htm nella cartella principale dell'applicazione. Se il file viene trovato, ogni richiesta che tu possa fare all'applicazione mostrerà il contenuto di quel file. E' un ottimo modo per metterla in manutenzione. Leggi questo articolo che ne parla:
http://www.aspitalia.com/script/845/Mettere-Applicazione-ASP.NET-2.0-Manutenzione-App_offline.htm.aspx

Mentre, per la questione di reindirizzare l'utente: Asp.Net ha un meccanismo di autenticazione chiamato Membership API che puoi sfruttare per far registrare gli utenti, farli loggare, proteggere efficacemente le risorse da accessi non autorizzati e reindirizzare gli utenti anonimi alla pagina di login. Ti mando il link ma richiede un po' di studio prima di poter essere usato.
http://www.aspitalia.com/articoli/asp.net2/membership_roles_api.aspx
Se nel frattempo vuoi continuare ad usare il tuo sistema di login personalizzato, allora puoi mettere il redirect all'interno del Global.asax, un file che puoi aggiungere alla cartella principale.
Esempio:
<%@ Application Language="VB" %>
<script runat="server">
'questa procedura verrà eseguita ad ogni richiesta
Sub Application_AcquireRequestState(ByVal sender as Object, ByVal e as EventArgs)
    'ottengo un riferimento alla richiesta corrente
    Dim contesto = System.Web.HttpContext.Current
    'mi imposto il percorso della pagina di login
    Dim paginaLogin as String = "~/login.aspx"
    'se il contesto non era vuoto e la pagina non è già quella di login...
    If Not contesto.Session is Nothing And contesto.Request.Url.AbsolutePath <> System.Web.VirtualPathUtility.ToAbsolute(paginaLogin) Then
        'vado a leggere la variabile di sessione "user"
        Dim user as String = contesto.Session("user")
        'se era vuota o non valorizzata
        If user = "" Or user = Nothing Then
            'redirigo l'utente alla pagina di login
            Response.Redirect(paginaLogin)
        End If
 End If
End Sub     
</script>

Questo sistema è preferibile rispetto a quello dell'include perché il codice che scrivi ha effetto su ogni richiesta di pagina senza che tu debba copiare e incollare la direttiva include su ogni-singola-pagina.

Se vuoi informazioni sul funzionamento del Global.asax, puoi leggere questo:
http://msdn.microsoft.com/it-it/library/2027ewzw%28v=vs.100%29.aspx

ciao
Modificato da BrightSoul il 02 febbraio 2012 22.06 -

Enjoy learning and just keep making
43 messaggi dal 05 gennaio 2011
Grazie per i suggerimenti, il file speciale off_line.htm può essere sicuramente utile ma nel mio caso la funzione offline viene attivata dopo che dal global.asax in start application verifico dal db che la data di scadenza del contratto è < alla data attuale, mi resta attiva la parte di admin dove io posso entrare e cambiare la data quindi deve elaboare la mia richiesta verso la parte di backoffice.

Per quanto riguarda la parte di login sicuramente l'uso di membership è ottimale solo che ho la seguente necessità:

- vorrei utilizzare il db del portale dove mettere due tabelle tb_utenti e tb_ruoli

tb_utenti: id_utente, nome_utente_ pwd_utente

pwd_utente metto solo l'hash sha1 non mi interessa il recupero pwd, email ecc...

tb_ruoli: id_ruolo, nome_ruolo

Le info che ho richiesto sono per implementare una gestione utenti basata su un file login.aspx che fa una query sulla tb_utenti e mette poi tutto nelle session, la gestione degli utenti e ruoli la programmo con semplici insert update e delete.
So che ci sono molti contro e pochi pro rispetto alla gestione con user.id e la protezione delle cartelle direttamente dal web.config ma non riesco a trovare in rete un esempio semplice di creazione di un provider personalizzato per utenti e ruoli in vb, a me non serve tutta la gestione utenti modifica inserisci cancella fatta in automatico dal provider, quella la gestirei da una pagina in admin facendo query sulla tb_utenti e tb_ruoli, al momento uso degli utenti messi a mano nel web.config e la login fa questo lavoro:


Protected Sub do_login(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        
        
        If FormsAuthentication.Authenticate(Username.Text,Password.Text) Then
         FormsAuthentication.RedirectFromLoginPage(Username.Text,False)
        Else
            Errore.Text = "User o pass errate"
          End If
    End Sub


Con il provider in web.config che fa puntare la richiesta sul db sql penso che la pagina di login non cambi.

e la gestione dello user.id ecc resti uguale, quello che cerco è la definizione di questo provider nel db per gli utenti, i ruoli, gli esempi che ho trovato in rete contenevano una serie di file con classi per la gestione delle varie funzione di creazione utenti e ruoli... non posso gestire queste cose con semplici query di insert o update verso le due tb utenti e ruoli? dove trovo una definizione semplice per associare le mie due tabelle al provider utenti e ruoli?
Grazie ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
Bladerunnet ha scritto:
a me non serve tutta la gestione utenti modifica inserisci cancella fatta in automatico dal provider


ok, immagino che comunque userai il metodo User.IsInRole(nomeRuolo) per verificare che l'utente faccia parte di un dato ruolo e che perciò abbia l'autorizzazione a visitare la pagina richiesta.

Affinché questo metodo funzioni, occorre impostare per l'utente una nuova IPrincipal (è una nuova identità che lo distingue dall'utente anonimo), subito dopo che hai verificato la correttezza dei suoi dati d'accesso.

Volendo sviluppare un provider personalizzato, inizia da qui, trovi degli articoli sull'argomento.
http://www.aspitalia.com/focuson/839/Speciale-Provider-Model-ASP.NET-2.0.aspx

Se dovessi trovarlo troppo oneroso, puoi pur sempre utilizzare un tuo sistema che vada semplicemente ad interrogare il db per verificare la presenza dello username e password forniti dall'utente.
Se i dati sono validi, o se l'utente si era già autenticato in precedenza, creagli una nuova identità munita dei suoi ruoli, come mostrato in questo articolo di Andrea Zani:
http://www.aspitalia.com/articoli/asp.net/formauthroles-p-2.aspx

Giusto per fare qualche test, fai un nuovo sito web completamente vuoto in cui provi questa meccanica. Così non c'è rischio che ci siano altri pezzi di codice ad interferire. Poi, quando hai fatto esperienza su come funziona, integralo nella tua attuale applicazione.

Sempre nello stesso articolo trovi un esempio su come configurare l'elemento <authorization> del web.config per regolare gli accessi alle varie sezioni dell'applicazione.

La struttura della tabella utenti e ruoli, nel database, è completamente a tua discrezione.


ciao

Enjoy learning and just keep making

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.