codeigniter sess_destroy() funktioniert nicht richtig,was m ich falsch?
Ich bin ein Neuling in codeigniter. Ich bin mit einem login Formular login als admin. Wenn der admin meldet sich mit dem korrekten Benutzernamen und Passwort er/Sie ist gerichtet auf die home-Seite mit einer session-Variablen.und dann klickt er die Schaltfläche Abmelden die Sitzung soll zerstört werden, und leiten Sie den Benutzer zum log-in-Seite ich.e-log-in-Formular-Seite.
Dem 1. controller ist admin:
<?php
class Admin extends CI_Controller
{
function index()
{
$data['main_content'] = 'admin/log_in';
$this -> load -> view('includes/admin/admin_template', $data);
}
function log_in()
{
$this->load->model('admin_model');
$query = $this -> admin_model -> validate();
if ($query)//if the user's credentials validated...
{
$data = array('user_name' => $this -> input -> post('user_name'), 'is_logged_in' => true);
$this -> session -> set_userdata($data);
redirect('admin/home/admin_home');
} else//incorrect username or password
{
$this -> index();
}
}
function log_out()
{
$this->session->sess_destroy();
redirect('/admin/admin','refresh');
}
}
Dem zweiten controller die Start-controller:
<?php
class Home extends CI_Controller
{
function __construct()
{
parent:: __construct();
$this->is_logged_in();
}
function is_logged_in()
{
$is_logged_in = $this -> session -> userdata('is_logged_in');
if (!isset($is_logged_in) || $is_logged_in != true)
{
$this -> load -> view('admin/forbidden');
}
}
function admin_home()
{
$data['main_content'] = 'home_view';
$this->load->view('admin/home_view');
}
}
Modell ist admin_model:
<?php
class Admin_model extends CI_Model
{
function __construct()
{
parent:: __construct();
}
function validate()
{
$this->db->where('user_name',$this->input->post('user_name'));
$this->db->where('password', $this->input->post('password'));
$query = $this->db->get('user');
if($query->num_rows==1)
{
return true;
}
}
}
Nun, er soll den Benutzer Abmelden und zerstören der session, aber wenn ich auf die zurück-Taste meines Browsers, bekomme ich Seite wieder, die eigentlich nicht zu sein, und die session wird nicht zerstört.
bitte sagen Sie mir, was mache ich hier falsch. Ich bin mit codeigniter 2.1.0.
- Nach dem drücken der zurück-Taste, werden Sie beim abrufen einer Seite aus dem cache? Oder wenn du
F5
sieht die Seite neu laden und zeigen Ihnen angemeldet? - ja, es funktioniert,sogar nach dem neu laden, zeigt mir angemeldet
- wenn Sie ziehen Sie sich einen "sicheren" Seite in einem anderen browser (keine session-Daten) kommst du auch?
- Ist ein Fehler Aufgetreten, die Aktion, Die Sie angefordert haben, ist nicht erlaubt.---diese Fehlermeldung wird angezeigt, wenn ich dies auch tun.
- ist, dass der Fehler der Ausgabe von
$this -> load -> view('admin/forbidden');
Sie müssen sich klar sein über diese Dinge. - Nein, das ist das eine. wo muss ich die aktivieren der profiler?
- dann Ihre login kaputt ist irgendwo, Sie haben einige fragwürdige code und controller-Struktur, müssen Sie ziehen Sie Ihre
function log_in()
aus dem controller, sollte in eine Bibliothek, werfen Sie einen Blick auf tank_auth, um zu sehen, wie es zu tun richtig: konyukhov.com/soft/tank_auth - okay, ich danke Ihnen für Ihre Hilfe. ich lassen u wissen, ob ich diese beheben können 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
nachdem man durch all die Schwierigkeiten und die Suche in verschiedenen Orten ich endlich gefunden haben, eine richtige Lösung auf diese Frage.das problem angekommen, denn der browser zeigte die zwischengespeicherten Seiten.es war nicht die session, das war das problem und wurde es richtig funktioniert.
hier ist die Lösung:
in der home controller hinzufügen einer Funktion zum löschen des Caches und der Aufruf in den Konstruktor-Funktion funktioniert der trick 🙂
hier ist die Heimat controller mit der Lösung:
jetzt Dank geht auf diesen link " logout-Funktion in der code-igniter ",hier habe ich die Lösung gefunden und es funktioniert perfekt 🙂
Wenn Sie sich Abmelden-auch wenn die session zerstört wird, wird die Sitzung userdata bleibt für die Dauer der aktuellen CI-Seite zu bauen.
Als Vorsichtsmaßnahme sollten Sie tun:
Finden Sie unter: http://codeigniter.com/forums/viewthread/110993/P130/#662369
redirect('/admin/admin');
werden konnte, Wonach das problem, auch wenn alles andere fehlschlägt, aktivieren Sie die$this->output->enable_profiler(TRUE);
zu sehen, was Los ist.