Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [3.5 - C#] Convenzione COOKIES

    Innanzi tutto CIAO A TUTTI

    vado subito al sodo, il mio problema è il seguente (utilizzo c# framework 3.5 vs 2008):

    Ho una form di login che vorrei implementare con l' utilizzo dei cookies ( per gestire anche la possibilità di chiudere il browser ed una volta riaperto, riconoscere l' utente senza dover chiedere nuovamente le credenziali ) al momento riesco a scrivere un file di cookie, codificarlo, inserire il value ed una volta caricato nella response, recuperarlo nella request della pagina di accesso, decriptare il value ed utilizzarlo, il problema è che non so quale sia lo standard generalmente usato ai fini della sicurezza e della gestione degli stessi.

    In pratica navigando in rete ho notato che la gestione dei cookies viene impostata nel global.asax ed esattamente nel metodo Application_AuthenticateRequest, ma non riesco a capire bene come funziona ( al momento ho creato un metodo che richiamo nel load_page ).

    Al momento il controllo che ho pensato di effettuare è utilizzando non solo i cookie ma anche le session per prevenire il caso in cui un utente abbia disabilitato i cookie sul browser e volevo chiedere se è sbagliato o se esiste uno standard (diciamo una convenzione ) che non conosco. Di seguito il controllo che ho pensato:

    Una volta effettuato l' accesso,

    Effettuo controllo sulla session se esiste andare avanti prendendo i dati dalla session se non esiste vuol dire che ho chiuso il browser quindi controllo se esiste il cookie
    se il cookie esiste controllo che esistono i dati dell' utente, il che vuol dire che abbiamo checcato ricordami in caso esistono salvarli nuovamente nella session e proseguire nel caso il cui non esistono vuol dire che l' utente non ha checcako ricordami e quindi viene chiesto nuovamente di autenticarsi.

    GRAZIE MILLE MILA in anticipo, spero sia chiaro in caso posto qualche parte di codice. Saluti ^-^

  2. #2

  3. #3

    [3.5 - C#] Convenzione COOKIES

    Ti ringrazio per avermi risposto, sto lottando da 3 giorni...

    al momento faccio qualcosa di analogo agli esempi che hai postato in pratica ti riporto alcune parti del mio codice:

    Login.cs
    codice:
    if (usersEntity != null)
                {
                    //Se l' utente esiste
                    if (usersEntity.id_user != 0)
                    { 
                        //Creo il cookie
                        Accesso accesso = new Accesso();
                        accesso.AuthenticateUser(usersEntity.nominativo, 45, true, "dati Utente",       Response);}
    }
    Accesso.cs
    codice:
     public void AuthenticateUser(string username, int timeout,
            bool persistent, string userData, HttpResponse response)
            {
                // Crea il ticket di autenticazione
                FormsAuthenticationTicket ticket =
                new FormsAuthenticationTicket(
                    1,
                    username,
                    System.DateTime.Now,
                    persistent ? DateTime.Now.AddMinutes(45) :
                        DateTime.Now.AddMinutes(timeout),
                    persistent,
                    userData,
                    FormsAuthentication.FormsCookiePath);
    
                // Produce la stringa crittografata a partire dal ticket,
                // utilizzabile come cookie
                string enc = FormsAuthentication.Encrypt(ticket);
                // Crea il cookie e lo aggiunge all'insieme dei cookie
                HttpCookie cookie = new HttpCookie(
                    FormsAuthentication.FormsCookieName,
                    enc);
                cookie.Path = FormsAuthentication.FormsCookiePath;
                //cookie.Secure = FormsAuthentication.RequireSSL;
                if (ticket.IsPersistent)
                    cookie.Expires = ticket.Expiration;
                response.Cookies.Add(cookie);
                // Ridirige all'URL che ha causato il login
                response.Redirect(FormsAuthentication.GetRedirectUrl(
                    username,
                    persistent));
            }
    nell' app.config è impostato in questo modo:
    codice:
     <authentication mode="Forms">
          <forms name="ASPXAUTH"
                 loginUrl="login.aspx"
                 protection="All"
                 timeout="50"
                 path="/"
                 requireSSL="true"
                 slidingExpiration="true"
                 cookieless="UseDeviceProfile"
                 defaultUrl="home.aspx"/>
        </authentication>
    al momento è come se fosse sempre Checkato il ricordami per testarlo poi successivamente lo modificherò. Solo non riesco a capire se il modo che sto utilizzando è corretto oppure devo inserire qualcosa nel global.asax, nel metodo Application_AuthenticateRequest anche perchè controllando gli esempi che m hai postato settano qualcosa all' interno che sinceramente non riesco a capire a cosa servono...

    ESEMPIO global.asax
    codice:
    public void Application_AuthenticateRequest(object sender, EventArgs e)
            {
                //Get authentication cookie
                string sCookieName = FormsAuthentication.FormsCookieName;
                HttpCookie authCookie = Context.Request.Cookies[sCookieName];
    
                //If the cookie cannot be found then do not issue the ticket
                if (authCookie == null)
                {
                    return;
                }
    
                //Get the tictet and rebuild the principal and identity
                FormsAuthenticationTicket authTicket =
                FormsAuthentication.Decrypt(authCookie.Value);
    
                //Get the Roles
                string[] sRoles = { "Group Administrator", "Other" };// authTicket.UserData.Split(new char[] { '|' });
    
                //Build the identity
                System.Security.Principal.GenericIdentity userIdentity =
                new System.Security.Principal.GenericIdentity(authTicket.Name);
    
                //Build the Principal
                System.Security.Principal.GenericPrincipal userPrincipal =
                new System.Security.Principal.GenericPrincipal(userIdentity, sRoles);
    
    
                Context.User = userPrincipal;
            }
    poi una volta presa in carico dalla home la richiesta decodifico il value del cookie e procedo con la navigazione del sito, salvando nelle session i dati di navigazione in modo da poter gestire l' utente finchè non chiude il browser altrimenti controllo se il cookie esiste e riprendendo i dati e salvandoli nella session continuo la navigazione ( faccio questo per due motivi, il primo è prevenire l' eventuale disabilitazione da parte dell' utente dei cookie, la seconda è che in questo modo dovrebbe essere più leggera la navigazione nel sito attraverso il solo controllo della session anziché andare ogni volta a recuperare i dati da dentro il cookie...)

    Che tu sappia come procedimento è corretto o esiste qualche metodo che sfrutta a pieno le potenzialità dell' Asp.NET? Se si, a cosa serve la configurazione nel global.asax (ancora non riuscito a capire bene se è utile utilizzarla, e come funziona).

    Di nuovo grazie

  4. #4
    premetto che non sono mai andato a customizzare così tanto l'autenticazione, io ho usato il controllo standard di login e le autorizzazioni nel Web.sitemap

    la gestione dell'evento Application_AuthenticateRequest nel global.asax, è tipica dell'autenticazione "form".
    Serve a prelevare i "dati sensibili" nella request (cookie, header, session....) e convertirli nell'oggetto "Principal" per autenticarsi.

    Quello che mi chiedi tu, ovvero se è giusto cercare la session, il cookie, controllare se... ...., sono operazioni che vengono fatte in automatico dal modulo di autenticazione, ecco perché ti dicevo che io non sono mai sceso così tanto nel codice......
    perché rifare una cosà già fatta??? In particolare invece di usare la sessione, il modulo di autenticazione usa la codifica sull'URL

    per avere maggiorni informazioni, leggi qui, e dai un'occhaita verso la fine all'autenticazione da form:
    http://msdn.microsoft.com/en-us/library/ff649266.aspx

    Update:
    http://msdn.microsoft.com/en-us/libr...ookielessforms
    http://support.microsoft.com/kb/910443
    http://www.codeproject.com/KB/web-se...ookieless.aspx
    http://www.aspitalia.com/articoli/asp.net/formauth.aspx
    http://www.aspitalia.com/articoli/as...ultilogin.aspx

    Ora hai abbastanza materiale per scrivere un saggio... HI HI HI

    ciao

  5. #5
    Leggendo ho capito che il tipo di autenticazione che effettuo è corretta almeno dal punto di vista form (non essendo una intranet l' autenticazione deve essere effettuata da parte dell' utente manualmente senza utilizzare l' autenticazione Windows).

    In pratica il global.asax viene richiamato dopo che effettuo l' autenticazione nel sito e quindi durante la vera e propria navigazione all' interno dello stesso, e mi risparmia tutto il processo che effettuo nel load_page della pagina di arrivo dopo la login e fino a qui va benissimo ma la fase prima comunque la devo implementare manualmente, ovvero il fatto che dopo l' autenticazione riuscita costruisco il cookie dell' utente salvando alcuni valori all' interno è necessaria penso.. Il controllo delle session e del cookie invece mi viene fatto nel global.asax.

    Solo che, come faccio a recuperarmi i valori all' interno del cookie, non devo farlo sempre manualmente?

    Il metodo che utilizzi tu permette di recuperare anche il value del cookie?? (intendo il Web.sitemap )

    Quando creo il cookie devo salvare all' interno almeno tre valori che poi dovrò portarmi dietro durante la navigazione nel sito per effettuare alcune operazioni...

    Grazie ancora

  6. #6
    p.s. un saggio breve diciamo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.