Domanda

Ho utilizzato PHP e JavaScript per creare il sito web di mio padre.Vuole incorporare un sistema di accesso nel suo sito web e io ho il progetto del sistema che utilizza PHP.Il mio problema è: come faccio a mostrare i pulsanti se la persona ha effettuato l'accesso?

Per esempio - Hai Casa, Prodotti, Chi siamo, E Contatto.Voglio avere dei bottoni per Rivenditore, Distributore, e forse altre informazioni se l'utente ha effettuato l'accesso.Quindi lo avrò Casa, Prodotti, Chi siamo, Contatti, Rivenditore (se si accede al rivenditore), Distributore (se il login del distributore) e così via.

JavaScript sarebbe un buon modo per farlo o PHP, o forse anche entrambi?Utilizzo di JavaScript per mostrare e nascondere i pulsanti e PHP per verificare quali pulsanti mostrare.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

È stato utile?

Soluzione

Per quanto riguarda la sicurezza, non puoi fidarti di ciò che viene dal cliente:

  • Il visitatore può vedere tutto il tuo codice (HTML e Javascript, non PHP) e provare cose
  • Il visitatore non può nemmeno utilizzare un browser;è banalmente semplice inviare una richiesta con uno script

Ciò significa che nascondere i pulsanti è un buon design dell'interfaccia utente (perché non puoi usarli se non hai effettuato l'accesso).Ma non è una caratteristica di sicurezza.La funzionalità di sicurezza consiste nel verificare, sul server, che il visitatore abbia effettuato l'accesso prima di ogni azione che lo richiede.

Se non intendi mostrare i pulsanti, non è utile inviare l'HTML e le immagini al browser e poi nasconderle con Javascript.Vorrei verificare con PHP.

Altri suggerimenti

Nel file del menu o dove inserisci:

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

Quindi nelle pagine che richiedono l'autenticazione basta fare questo:

<?php 
    require 'auth.php';
    require_login();
?>

Dove auth.php può contenere:

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

Se usi Javascript per nascondere i pulsanti, apri una falla di sicurezza nell'applicazione.Un utente malintenzionato potrebbe disattivare JavaScript o applicarne alcuni propri per aggirare la sicurezza.

Suggerisco di utilizzare PHP per scegliere se eseguire il rendering dei pulsanti o meno.Lo faccio in .NET abbastanza spesso.

Dovresti essere in grado di controllare l'accesso dell'utente sul lato server anche ogni volta che tenta di utilizzare un pulsante limitato.

Ciò che abbiamo fatto nel mio lavoro è avere una libreria che fornisca funzioni come verificare se l'utente ha effettuato l'accesso.Per esempio:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

Per le pagine che solo gli utenti autenticati dovrebbero vedere, il controller controlla se hanno effettuato l'accesso e in caso contrario li reindirizza alla pagina di accesso.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

Tutto ciò che ha scritto Christian Lescuyer è corretto.Si noti, tuttavia, che ha detto "vorrei" e non "dovresti".La scelta non è così facile.

Innanzitutto la sicurezza non è un problema nella scelta.Dovresti avere un controllo di sicurezza sul server quando esegui un'azione.Quale codice decide di mostrare/nascondere il pulsante che porta all'azione è irrilevante.

Ciò ci lascia con un solo inconveniente nel fare la logica mostra/nascondi in Javascript: l'HTML inviato all'utente è più grande del necessario.Questo potrebbe non essere un grosso problema.

Avere la logica mostra/nascondi in PHP ha però uno svantaggio.Il codice PHP richiesto è solitamente a zuppa di etichette.Il codice di Akira fornisce un buon esempio di come viene solitamente eseguito.

Il codice Javascript corrispondente sarebbe probabilmente simile a questo:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(assumendo che gli elementi che potrebbero essere nascosti abbiano display:none per impostazione predefinita).

Questo stile consente anche un simpatico scenario "Ajax":l'utente vede una pagina senza area segreta, inserisce la password, vede l'area segreta, tutto senza aggiornare la pagina.

Quindi, se hai già uno script che viene eseguito quando il tuo documento viene caricato per altri motivi, prenderei seriamente in considerazione l'idea di mostrare/nascondere la logica lì.

Fondamentalmente dove hai il tuo menu in html, diciamo come un elenco <ul> <li>Home</li> </ul> aggiungi php dopo </li> dell'ultimo elemento:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top