wake-up-neo.net

Sitzung nach Umleitung in Codeigniter verloren

Ich benutze Codeigniter als Framework.

Zum einen verwende ich localhost, aber wenn ich meine IP-Adresse ändere, funktioniert die Login-Funktion nicht mehr. Ich habe festgestellt, dass die Sitzung nach der Umleitung an einen anderen Controller verloren geht.

Hier ist das Ergebnis von print_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[last_activity] => 1285962398 
[user_data] =>

Wie Sie sehen, wurden keine Daten an user_data übergeben, aber diese wurden beim Testen vor der Umleitung festgelegt.

Ich trenne den Controller in zwei, von denen der erste Benutzer ist -> Handler der Login-Funktion und ein anderer Planer, welcher Handler des Links, den ich vom Benutzer-Controller umleite.

users.php (erster Controller):

$this->load->model('users_model');
$this->load->model('mymodel');
$this->load->database();

$email = $this->input->post('email');

$pass = $this->input->post('password');

$type = $this->input->post('type');

// Authenticate the user
$userdata = $this->users_model->auth_user($email,$pass,$type);

if($userdata)
{
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
                  'LASTNAME' => $userdata->LASTNAME, 
                  'EMAIL' => $userdata->EMAIL,
                  'LOGIN' =>TRUE, 'TYPE' => $type);
    $this->session->set_userdata($data);
    redirect('planner/view_system','refresh');
}

planner.php (zweiter Controller):

function __construct() {
    parent::__construct();

    if ( ! ($this->session->userdata('LOGIN')))
    { 
        print_r (var_dump($this->session->userdata('FIRSTNAME')));
        print_r($this->session->all_userdata());
    }
    $this->load->helper(array('form','html','url'));

Und hier ist meine Konfig

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
18
Zatanna

Zunächst müssen Sie sicherstellen, dass sich in den Sitzungselementen keine Sonderzeichen wie '\ n' oder '\ v' befinden. Diese Zeichen können dazu führen, dass Ihre Zeichenfolge in der Mitte durchbricht. Versuchen Sie trim () um Hilfe.

Wenn das nichts nützt, liegt vielleicht ein Codierungsproblem vor. Versuchen Sie, das Sitzungselement zu verschlüsseln, bevor Sie es festlegen.

2
user1685398

Ich habe dieses Problem gelöst, indem ich $ config ['cookie_domain'] für localhost konfiguriert habe

$config['cookie_domain']    = "localhost";

ich hatte diese Variable zunächst auf einen vollständig qualifizierten Domänennamen wie www.exampledomain.com gesetzt, aber mittlerweile verwendete ich einen lokalen Server. 

Die Domäne, unter der Ihr Skript ausgeführt wird, sollte mit der unter $ config ['cookie_domain] festgelegten Domäne identisch sein, um einen unerwarteten Ausfall der Sitzungsklasse codeigniter zu vermeiden.

1
katwekibs

Ich habe ein ähnliches Problem, und es stellte sich heraus, dass dieses Problem sehr alltäglich ist ...

wurzel des Übels meiner Probleme waren die Namen mit dem Zeichen "_"

beispiel war vorher 

$this->session->set_flashdata('message_success', 'some message');

nach wurde

$this->session->set_flashdata('messagesuccess', 'some message');

Mein Problem gelöst Danke Mann mit dieser Ressource http://biostall.com/losing-codeigniter-sessions/

1
Dmitriy

Sie sollten Ihrer autoload.php -Datei eine Sache hinzufügen.

$autoload['libraries'] = array('database','session');

Dies löst das Problem der Sitzungsumleitung.

1
shuvro

Bitte überprüfen Sie Ihre Links und stellen Sie sicher, dass sie richtig geschrieben sind. Stellen Sie beim Schreiben absoluter URLs sicher, dass Sie den Teil "www" hinzufügen. Dies war das Problem in meinem Fall. Ich hoffe das hilft jemandem.


Gut: header ("Location: http://www.ihredomain.de/controller/page ");


Schlecht (bricht Ihre Sitzung ab): header ("Location: http://yourdomain.com/controller/page ");

0
Amin Balogun

Aus meiner Erfahrung können die Probleme sein:

  1. eine (oder mehrere) Ihrer Dateien ist nicht "UTF-8 mit BOM" (wenn Ihre Website nicht nur Englisch ist und UTF-8 als Kodierung wie meine verwendet). Sie müssen alle Dateien in 'UTF-8 with BOM' ändern. Notepad ++ wird helfen.
  2. es gibt einige Zeichen vor dem PHP-Tag oder nach?> (besser nehmen?> aus). Bitte stellen Sie sicher, dass keine Zeichen Leerzeichen enthalten.
  3. Wenn Sie localhost/xxxxxx als Adresse aufrufen, ändern Sie ihn in 127.0.0.1/xxxxxx oder Ihre LAN-IP
  4. Ich speichere Sitzungen immer in DB anstatt in Datei (einfacher für das Debuggen).
0
mohonid1

Ich war zuerst geschockt, als ich auf dieses Problem stieß. Es ist mir passiert, weil meine Sitzungsdaten ein @ -Zeichen hatten.

Die Lösung besteht darin, die Daten einfach mit base64_encode zu kodieren.

Z.B: 

$Data = urlencode(  base64_encode($Email) );
$this->session->set_userdata('Data', $Data);

Und um es wiederzuverwenden, machen Sie einfach folgendes:

$Data = base64_decode( urldecode( $this->session->userdata('Data') ) );

Hoffe das hilft.

NEW FINDING: Dieses Problem bleibt auf einigen Browsern und Geräten bestehen. Das ist also keine wirkliche Lösung mehr. Zum Beispiel funktioniert es auf Samsung Android, MicroMAX Android, aber nicht auf Huawei Android.

0
itsols

Ich habe genau das gleiche Problem und hier ist was ich tue. Gehen Sie zuerst zur Datei system/libraries/Session/Session.php. Kommentar session_start(); in Zeile 140. Bei function _configure Kommentieren Sie einige Zeilen unter // Security is king

//      ini_set('session.use_trans_sid', 0);
//      ini_set('session.use_strict_mode', 1);
//      ini_set('session.use_cookies', 1);
//      ini_set('session.use_only_cookies', 1);
//      ini_set('session.hash_function', 1);
//      ini_set('session.hash_bits_per_character', 4);

Wechseln Sie in Ihrem Stammprojekt zur Datei index.php. Setzen Sie session_start(); unter <?php

Hoffe das hilft.

0
mbdrian

Es ist zu spät, aber ich war mit demselben Problem konfrontiert. Zum Glück löse ich dieses Problem, indem ich die Konfiguration wie unten ein bisschen ändere.

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE; // change this
$config['sess_use_database']    = FALSE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = TRUE; // change this
$config['sess_match_useragent'] = TRUE; // change this
$config['sess_time_to_update']  = 300;

Ich hoffe, das würde auch für Sie funktionieren.

0
Syed Arif Iqbal

In meinem Fall tritt der Fehler nach einigen Tests (mit https und http in localhost) für dieses Problem auf und die $ config ['cookie_secure'] wurde nicht ordnungsgemäß festgelegt. Sie können also in der config.php Änderungen vornehmen:

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

Prost!

0
elverde

Gleiches Problem mit mir.

Bitte überprüfen Sie, ob Sie die Sitzungsbibliothek in den Controller laden.

$this->load->library('session');
0
bkac