Domanda

Ho una classe denominata utente con funzione statica loginRequired (), che restituisce false se l'utente è connesso e vero se l'utente è disconnesso. Si aggiunge anche un errore a una classe errore che ho creato che racconta la persona che utilizza il sito che essi devono essere registrati per visualizzare il contenuto.

L'idea è che per la parte superiore di ogni funzione che richiederebbe all'utente di effettuare il login, scriviamo questo codice:

if(User::loginRequired()) return;

Il che emette l'errore e tornare immediatamente dalla funzione. Preferirei fare questo, però:

User::loginRequired();

E ritorno dalla funzione chiamante all'interno della funzione loginRequired ... ma perché loginRequired () è in una classe separata in un file separato, questo non funziona. E 'possibile tornare dalla funzione che chiama loginRequired (), entro loginRequired ()?

Grazie.

È stato utile?

Soluzione

Il modo ho visto un numero di applicazioni open source gestire questo è da avere una funzione require_login() che esegue un reindirizzamento qualora l'utente non essere registrato.

Altri suggerimenti

Non sono sicuro che si può fare esattamente ciò che si vuole, tuttavia, si potrebbe desiderare di guardare con eccezioni . Ciò consentirebbe di generare un'eccezione nella funzione User :: loginRequired e prendere ad un certo livello superiore. Si potrebbe anche guardare con il href="http://us3.php.net/exit" rel="nofollow noreferrer"> uscita funzione PHP.

è il contenuto all'interno della pagina effettiva dinamica? Quello che voglio dire è, ho bisogno di autenticare solo per vedere qualcosa di diverso nella pagina di accesso, o devo vedere alcune cose, quando ho effettuato l'accesso e altre cose quando non sono, ecc? Perché se l'intera directory / sezione del server è protetto da un log-in schermo si può solo aggiungere qualcosa al file .htaccess della directory che reindirizza chiunque non connesso, ecc.

D'altra parte, si potrebbe avere il file tenendo lo stato di accesso incluso in qualunque pagina / script che l'utente sta visualizzando, con il file incluso il ritorno appena lo stato di accesso al posto di tutto il suo contenuto. Questo è coperto da include sotto Esempio 5, "include () e l'istruzione return ()". Se avete fatto questo, è possibile utilizzare una condizione ternario come:

$logged_in = (include('userlogin.php') == TRUE) ? TRUE : FALSE;

E poi in ogni funzione protetta avere qualcosa di simile:

global $logged_in;

Si sta ancora bloccato con una clausola IF avvolgendo l'intera funzione, ma almeno si ha lo stato di accesso. Se si voleva sbarazzarsi della IF all'interno della funzione, si può sempre fare chiamando la funzione condizionale. Come:

$content = ($logged_in == TRUE) ? some_function() : redirect_User();

Poi di nuovo, ho appena cominciato a studiare questa roba 2 mesi fa e ancora non capisco classi e oggetti, in modo da poter essere lontano di base.

OT: Vorrei pensare di cambiare il nome del metodo da isLoggedIn () se il vostro scopo descritto è l'unico. Un metodo chiamato loginRequired () sarebbe meglio proteggere contenuti riservati.

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