Ho creato una registrazione e accesso per il mio sito Web e tutte le convalide funzionano bene sia per l'iscrizione che per l'accesso. Dopo che l'utente ha fornito le credenziali valide, viene inserito nell'area membro con un messaggio di benvenuto che dice Hello first_name last_name .. fondamentalmente il nome e il cognome vengono acquisiti dal database.Qual è la procedura migliore per limitare le pagine specifiche agli utenti registrati solo in Codeigniter?
Qualsiasi cosa io voglia fare è limitare l'area membro solo agli utenti registrati. Tutti gli altri verranno reindirizzati alla pagina iniziale o alla pagina di accesso o dove mai deciderò di dover essere reindirizzati a.
Io uso ci_sessions che sono memorizzati in una tabella "ci_sessions" nel mio database. Session_id, ip_address, user_agent, last_activity e user_data sono le colonne. Quindi penso che sia una forma di sicurezza piuttosto che avere un cookie memorizzato sul browser degli utenti, ce ne sono altri.
Ad ogni modo proprio ora per impedire a chiunque altro di accedere agli utenti registrati per accedere alla mia area membro del sito, ad es. http://mysite.com/member_area Io uso una semplice istruzione if nel mio controller per l'area membro:
if (! $this->session->userdata('first_name'))
{
redirect('login');
}
Questo controlla per vedere se la persona che sta tentando di accedere alla pagina zona socio ha un qualche tipo di dati memorizzati in user_data in mia tabella ci_sessions come ad esempio un first_name e in tal caso consente loro di accedere alla pagina che significa che devono aver effettuato l'accesso e avere ancora una sessione attiva.
Se non viene trovato nulla nel database, vengono reindirizzati alla pagina di accesso dei siti Web. Quello che voglio sapere è se c'è un modo migliore per farlo? Il modo in cui lo sto facendo ora è abbastanza sicuro?
Qui di seguito è il mio modello di codice:
<?php
class Current_User {
private static $user;
private function __construct() {}
public static function user() {
if(!isset(self::$user)) {
$CI =& get_instance();
$CI->load->library('session');
if (!$user_id = $CI->session->userdata('user_id')) {
return FALSE;
}
if (!$u = Doctrine::getTable('User')->find($user_id)) {
return FALSE;
}
self::$user = $u;
}
return self::$user;
}
public static function login($email, $password) {
// get User object by email
if ($u = Doctrine::getTable('User')->findOneByEmail($email)) {
// to ge the mutated version of the input password
$u_input = new User();
$u_input->password = $password;
// password match
if ($u->password == $u_input->password) {
$CI =& get_instance();
$CI->load->library('session');
$CI->session->set_userdata('user_id',$u->id);
$CI->session->set_userdata('username',$u->username);
$CI->session->set_userdata('first_name',$u->first_name);
$CI->session->set_userdata('last_name',$u->last_name);
self::$user = $u;
return TRUE;
}
unset($u_input);
}
// login failed
return FALSE;
}
public function __clone() {
trigger_error('No duplicates allowed.', E_USER_ERROR);
}
}
Tutto il tuo consiglio è apprezzato.
UPDATE
ne dite di aggiungere questo per il mio modello
$CI->session->set_userdata('logged_in', 'TRUE');
Questo aggiunge fondamentalmente "logged_in" per i miei dati utente in sessione nel DB con il valore "TRUE". nel mio controller per il mio "zona membro" Ho modificato l'istruzione if a dire questo:
if (! $this->session->userdata('logged_in')==TRUE)
{
redirect('login');
}
Se l'articolo non esiste ", che non lo farà se un isn utente' t loggato "allora verrà restituito FALSE e l'utente verrà reindirizzato alla pagina di login
Cosa ne pensi?
oppure potrei anche rendere TRUE qualcosa di segreto come dsb453rerfksdhbdsks322 per esempio. Qualcosa di casuale.
Sì grazie mille. Leggerò l'articolo di Phil Sturgeon per capire meglio. Un'altra cosa che ho notato è che anche se non sono loggato nell'ID di sessione, user_agent, ip, last_active sono memorizzati/aggiornati nel database. Ora posso immaginare milioni di persone che navigano nel sito web senza essere loggati. È così male? Non dovrebbe solo registrare le informazioni degli utenti registrati? se no c'è un modo per ottenerlo per distruggere questi dati o non registrarli del tutto se l'utente non ha effettuato l'accesso? – LondonGuy
Errore irreversibile: Classe "MY_Controller" non trovata in ... Penso che sia un bug di codeignitet 2.0 – LondonGuy
nada, è necessario utilizzare PHP5 che ricarica automaticamente la magia. vedi il mio post modificato – Ross