Domanda

Sto lavorando con il progetto del sito Web asp.net che alcune pagine necessitano di autenticazione. Sto usando l'appartenenza asp.net.

Ho letto alcune risposte. per esempio. crea tutte quelle pagine nella cartella e crea web.config interno che descriva il privilegio. Questo è un modo per risolvere il problema, ma ho bisogno di un modo che sia più riparabile ed efficace.

È stato utile?

Soluzione

Se non si desidera codificare questo in web.config (s), sarà necessario implementare una pagina di base " controllo del tipo.

La tua classe di pagina di base dovrebbe ereditare da System.Web.UI.Page e dovrebbe avere un metodo che potresti chiamare per dire " L'utente deve aver effettuato l'accesso " oppure " L'utente deve essere nel ruolo x " ;, e se l'utente non ha quel ruolo, reindirizza alla pagina di accesso (puoi ottenerlo chiamando FormsAuthentication.LoginUrl ).

Le tue pagine effettive dovrebbero ereditare direttamente da questa classe piuttosto che da System.Web.UI.Page. Quindi, in qualcosa come Init, o nella parte superiore di Page_Load, chiama

base.UserMustBeLoggedIn();

o

// Replace "AccessRole" with the name of your role
base.UserMustBeInRole("AccessRole");

E lascia che sia la pagina di base a gestirlo.

Se preferisci che i diritti di accesso siano archiviati in un database, puoi spostare tutta l'elaborazione nella pagina di base e in una posizione adatta nel ciclo di vita della pagina, controlla l'URL corrente rispetto alla tabella del database, controlla gli utenti ruolo / autenticazione rispetto ai requisiti e reindirizzamento come richiesto.


Nota che puoi creare la sicurezza a livello di pagina nella configurazione web in questo modo:

<configuration>
  <location path="LockedPage.aspx">
    <system.web>
      <authorization>
        <!-- Deny access to anonymous users -->
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Ulteriori informazioni sono disponibili su MSDN: The Location Element e < a href = "http://msdn.microsoft.com/en-us/library/532aee0e.aspx" rel = "noreferrer"> L'elemento di autorizzazione .

Altri suggerimenti

Puoi provare questo codice, Nell'evento di caricamento della pagina principale scrivere questo codice, aggiungi una proprietà

public bool m_bLoginRequired = true;

public bool IsLoginRequired
{
    get { return m_bLoginRequired; }
    set { m_bLoginRequired = value; }
}



try
        {
            // Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
            Response.Cache.SetNoStore();
            if (IsLoginRequired==true)
            {
                    if ( Session.IsNewSession  || HttpContext.Current.Session["Username"] == null)
                    {
                        FormsAuthentication.SignOut();
                        FormsAuthentication.RedirectToLoginPage("Session Expired");
                        Response.End();
                    }
                }
            }
        catch (Exception ex)
        {
            throw (ex);
        }

ora nella pagina di accesso devi scrivere questo codice

FormsAuthentication.SetAuthCookie(this.txt_UserName.Text.Trim(), false);  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, this.txt_UserName.Text.Trim(), DateTime.Now, DateTime.Now.AddMinutes(10), false, "HR");
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,  FormsAuthentication.Encrypt(ticket));
            cookie.Name = "jay";
            Session["UserName"] = txt_UserName.Text.Trim();
            Response.Cookies.Add(cookie);
            txt_UserName.Text = "";
            txt_Password.Text = "";
            Response.Redirect("HomePage2.aspx");

ora devi aggiungere l'evento pageinit nella pagina di accesso

protected void Page_PreInit(object sender, EventArgs e)
    {
        Master.IsLoginRequired = false; 
    }

se si desidera che l'utente possa accedere a una pagina non autorizzata, allora nell'evento pageinit di quella pagina

imposta il Master.IsLoginRequired=false;

specifica anche il loginurl nel file web.config .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top