2010-03-15 8 views
8

Così, ho impostato una pagina di accesso che verifica le credenziali dell'utente, quindi imposta i dati di sessione di codeigniter "email" e "is_logged_in" e alcuni altri elementi. La prima pagina dopo il login, i dati sono accessibili. Dopo quella pagina, non posso più accedere ai dati della sessione. Infatti, se provo a ricaricare quella prima pagina, i dati della sessione sono spariti.Sessione codificatore Dati non disponibili in altre pagine dopo il login

Ho provato a memorizzarlo nel database, memorizzandolo in modo non criptato (cattiva idea lo so, ma era per la risoluzione dei problemi), e memorizzandolo crittografato. Ho caricato automaticamente la libreria di sessione in config.php.

Ecco un esempio del codice che sto usando per impostare i dati di sessione:

$data = array(
        'email' => $this->input->post('username'), 
        'is_logged_in' => true 
       ); 
       $this->session->set_userdata($data); 

E per recuperarlo, sto usando:

$this->session->userdata('email'); 

O

$this->session->userdata('is_logged_in'); 

Ho lavorato molto con PHP e cookie e sessioni precedenti, ma questo è il mio primo progetto con Codeigniter e sono perplesso.

Potrebbe avere qualcosa a che fare con problemi di directory? Ho la pagina di accesso e il processo controllato da un controller di 'accesso', e quindi reindirizza a un controller 'sito'.

Grazie per il vostro aiuto, e per favore fatemi sapere se ho bisogno di chiarire qualsiasi cosa.

+0

Hai visto nella voce della tabella del database dell'utente connesso è stato aggiunto o non nella tabella ci_sessioni? E array JSON per la colonna che hai archiviato –

+0

Utilizza questa libreria di sessione nativa: AlamoPS

+0

Durante la fase di sviluppo, disattivo le contromisure CSRF e XSS in config.php. Disattiva anche la sicurezza dei cookie in Dev. Basta non spingere il file Dev config.php in Prod. –

risposta

6

Il tuo codice sembra buono. Ho avuto numerosi problemi con la libreria di sessione di Codeigniter, incluso qualcosa di simile a ciò che hai menzionato.

Considerare la libreria Native Session per risolvere il problema.

+0

Grazie, sembra aver risolto il problema! Preferisco comunque utilizzare sessioni native di PHP. – jswat

+0

Felice di averlo aiutato. Non sono eccessivamente innamorato della gestione delle sessioni di Codeigniter! –

+0

Ho lo stesso problema con un nuovo progetto CI che sto facendo .. È molto strano come tutti gli altri progetti funzionano bene con la sessione nel DB .. usando lavori nativi, ma è frustrante .. –

0

Im anche nuovo per il codice di accensione. Juz per dare un'idea. Hai messo session_start() nel tuo controller? qui è l'esempio:

classe CUser estende controller {

function Cuser() 
{ 
    parent::Controller(); 
    session_start(); 
    $this->load->helper('url');  
} 

}

forse im sbagliato ... ma u può provare ... :)

+0

Grazie, ma Codeigniter non usa la tradizionale sessione PHP. In realtà memorizza i suoi dati di "sessione" nei cookie (o in un database se lo hai impostato). Pertanto, non è necessario aggiungere il codice session_start(). La soluzione John McCollum ha risolto il problema. Grazie! – jswat

4

Proprio così chiunque altro provare a usare le sessioni di CI ha qualcosa da provare:

Ho cercato una soluzione allo stesso problema e, dopo molti vicoli ciechi, ho riesaminato il mio config.php.

In questo documento ho notato che $config['cookie_domain'] non è stato impostato correttamente. Al momento dell'impostazione (e dell'impostazione di cookie_prefix a ''), le sessioni ora funzionano correttamente.

Poiché il cookie deve essere impostato sul tuo dominio per poter essere estratto correttamente, è stato semplicemente non trovare un riferimento di cookie per la mia sessione e ne fare uno nuovo ogni volta.

(Impostazione di sessioni di database aiutato immensamente con capire questo fuori.)

2

Se qualcuno incontra questo problema, passare a config/config.php e assicurati che $config['sess_use_database'] sia impostato su TRUE. Ciò salverà tutti i dati della sessione nel tuo database, che ha funzionato per me.

Se non si dispone di una tabella denominata 'sessioni', eseguire questo comando SQL:

CREATE TABLE `sessions` (
`session_id` VARCHAR(40) NOT NULL DEFAULT '0', 
`ip_address` VARCHAR(16) NOT NULL DEFAULT '0', 
`user_agent` VARCHAR(120) DEFAULT NULL , 
`last_activity` INT(10) UNSIGNED NOT NULL DEFAULT '0', 
`user_data` TEXT NOT NULL , 
PRIMARY KEY ( `session_id`) , 
KEY `last_activity_idx` ( `last_activity`) 
) ENGINE = MYISAM DEFAULT CHARSET = utf8; 
+0

Ho questa tabella e sto salvando i dati con sessioni vuote. Dati sulla sessione non disponibili. Poi ho messo $ config ['sess_use_database'] \t = FALSE; . Quindi ha funzionato bene. –

0

mente per controllare il nome del cookie. Non può contenere punti.

Bad biscotto: .dominio.com

Buono biscotto: domaincom

0

Perché non si utilizza autenticazione di ioni per la sicurezza e per i dati di sessione ... Ho sempre usando che quando voglio creare un software con login. Inoltre è necessario creare una tabella nel db con la sessione dei nomi. E vai su config e file di database nella cartella Config e metti a true la sessione dove vuole per il database. Non hai letto bene la documentazione

Problemi correlati