2010-03-15 7 views
8

Also habe ich eine Login-Seite, die die Anmeldeinformationen des Benutzers überprüft, und setzt dann codeigniter Sitzungsdaten 'E-Mail' und 'is_logged_in' und ein paar andere Elemente. Auf der ersten Seite nach dem Login sind die Daten zugänglich. Nach dieser Seite kann ich nicht mehr auf die Sitzungsdaten zugreifen. In der Tat, wenn ich versuche, diese erste Seite neu zu laden, sind die Sitzungsdaten verschwunden.Codeigniter Sitzung Daten nicht in anderen Seiten nach dem Login

Ich habe versucht, es in der Datenbank zu speichern, es unverschlüsselt speichern (schlechte Idee, die ich weiß, aber es war für die Fehlersuche), und speichern Sie es verschlüsselt. Ich habe die Session-Bibliothek in der config.php automatisch geladen.

Hier ist ein Beispiel für den Code, den ich die Sitzungsdaten setzen bin mit:

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

Und es abzurufen, ich verwende:

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

Oder

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

Ich habe viel Arbeit mit PHP und Cookies und Sitzungen vor, aber das ist mein erstes Projekt mit Codeigniter und ich bin perplex.

Könnte es etwas mit Verzeichnisproblemen zu tun haben? Ich habe die Anmeldeseite und den Prozess von einem "Login" -Controller gesteuert und leitet sie dann an einen "Site" -Controller weiter.

Vielen Dank für Ihre Hilfe, und bitte lassen Sie mich wissen, wenn ich etwas klären muss.

+0

Haben Sie gesehen in der Datenbank Tabelle Eintrag des angemeldeten Benutzers hinzugefügt oder nicht in der Tabelle ci_sessions? Und JSON-Array für die Spalte, die Sie gespeichert haben –

+0

Verwenden Sie diese native Sitzungsbibliothek: AlamoPS

+0

Ich deaktivieren CSRF und XSS-Gegenmaßnahmen in der config.php, wenn ich entwickle. Schalte auch die Sicherheit für Cookies in Dev aus. Schieben Sie Ihre Dev config.php Datei nicht auf Prod. –

Antwort

6

Ihr Code sieht gut aus. Ich hatte zahlreiche Probleme mit der Sitzungsbibliothek von Codeigniter, einschließlich etwas, das dem ähnlich ist, was Sie erwähnt haben.

Betrachten Sie die Bibliothek Native Session, um Ihr Problem zu lösen.

+0

Danke, das scheint das Problem behoben zu haben! Ich bevorzuge sowieso native PHP Sessions. – jswat

+0

Froh, dass es geholfen hat. Ich bin nicht übermäßig verliebt in die Session-Behandlung von Codeigniter! –

+0

Ich habe das gleiche Problem mit einem neuen CI-Projekt, das ich mache .. Es ist sehr seltsam, da alle anderen Projekte gut mit der Sitzung in der DB arbeiten .. mit nativen Arbeiten, aber es ist frustrierend .. –

0

Ich bin auch neu zu Code-Zünder. Juz, um eine Idee zu geben. Hast du session_start() in deinen Controller gelegt? hier ist das Beispiel:

Klasse cUser erweitert Regler {

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

}

vielleicht im falschen ... aber u kann es versuchen ... :)

+0

Danke, aber Codeigniter verwendet keine traditionelle PHP-Sitzung. Es speichert seine Sitzungsdaten tatsächlich in Cookies (oder in einer Datenbank, wenn Sie es eingerichtet haben). Daher muss der session_start() - Code nicht hinzugefügt werden. Die Lösung John McCollum gab mein Problem behoben. Danke, obwohl! – jswat

4

Genau so jemand anderes versuchen, CI Sitzungen zu verwenden, hat etwas zu versuchen:

Ich habe nach einer Lösung für das gleiche Problem gesucht, und nach vielen Sackgassen habe ich meineerneut untersucht.

Darin habe ich festgestellt, dass $config['cookie_domain'] nicht richtig eingestellt wurde. Nach dem Einstellen (und dem Setzen meiner auf '') funktionieren die Sitzungen jetzt korrekt.

Da das Cookie auf Ihre Domäne gesetzt werden muss, um korrekt abgerufen zu werden, wurde einfach keine Cookie-Referenz für meine Sitzung gefunden und jedes Mal eine neue erstellt.

(Einrichten von Datenbanksitzungen dieser immens geholfen mit herauszufinden.)

2

Wenn jemand dieses Problem auftritt, gehen Sie auf Config/config.php und stelle sicher, dass $config['sess_use_database'] auf TRUE gesetzt ist. Dadurch werden alle Sitzungsdaten in Ihrer Datenbank gespeichert - was für mich funktionierte.

Wenn Sie keine Tabelle ‚Sitzungen‘ genannt haben, führen Sie diesen SQL-Befehl:

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

Ich habe diese Tabelle und speichern Daten mit leeren Sitzungen.Sitzungsdaten nicht verfügbar. Dann stelle ich $ config ['sess_use_database'] \t = FALSE; . Dann hat es gut funktioniert. –

0

Geist Ihre Cookie-Namen zu überprüfen. Es kann keine Punkte enthalten.

Bad Cookie: .domain.com

Gut Cookie: domaincom

0

Warum Sie Ion Auth für die Sicherheit und für die Sitzungsdaten nicht verwenden ... Ich habe immer mit, dass, wenn ich will ein erstellen Software mit Login. Außerdem müssen Sie eine Tabelle in Ihrer Datenbank mit der Namenssitzung erstellen. Und gehen Sie zu Config- und Datenbankdateien im Config-Ordner und setzen Sie die Session auf die gewünschte Position für die Datenbank. Sie haben die Dokumentation nicht gut gelesen

Verwandte Themen