2016-04-09 10 views
0

Ich habe einen Codeblock für die Zuweisung einiger Werte an flashdata in report Controller und einen anderen Block für den Zugriff auf flashdata in export_data Controller.Warum flashdata in CodeIgniter nicht immer funktioniert, während userdata immer funktioniert?

Report Controller:

if ($this->input->get_post('date_frm')) { 
       $conditions[] = 'appointment_date >= "'.trim($this->input->get_post('date_frm', TRUE)).'"'; 
      } 

      if ($this->input->get_post('date_to')) { 
       $conditions[] = 'appointment_date <= "'.trim($this->input->get_post('date_to', TRUE)).'"'; 
      } 

      $conditions = $this->search_model->searchterm_handler($conditions); 

      $this->session->set_flashdata('ext_data', $conditions); 

Und in Export_data Controller:

$myVar = $this->session->flashdata('ext_data'); 
    $this->session->keep_flashdata('ext_data'); 

Es funktioniert nicht immer, aber wenn ich userdata anstatt flashdata es funktioniert gut. Warum?

+0

** Was genau funktioniert * „nicht immer“ * und * „funktioniert gut“ * bedeuten ** – Sparky

+0

@Sparky: „nicht immer“ bedeutet, wenn ich dieses Programm auf meinem Rechner ausführen dann flashdata arbeitet und wenn es auf dem Server bereitgestellt wird, hört es auf zu arbeiten und auch wenn ich meinen Code mit einem anderen Entwickler-Rechner füge, der an demselben Projekt arbeitet, hört es auch auf –

+0

Findest du nicht, dass das wichtig genug ist, um es in deinem OP zu erklären? – Sparky

Antwort

0

OP: wenn ich userdata verwenden, anstatt flashdata es funktioniert gut

gesetzt Daten mit flashdata() nur für eine einmalige Anfrage gespeichert wird, dann ausgeräumt:

Documentation:CodeIgniter unterstützt "f lashdata ", oder Sitzungsdaten, die nur für die nächste Anfrage verfügbar sind und dann automatisch gelöscht werden.

... und keep_flashdata() speichert nur die Daten für eine zusätzliche Anfrage nach der ersten:

Documentation:Wenn Sie feststellen, dass Sie eine flashdata Variable durch eine zusätzliche Anforderung erhalten müssen, Sie können dies mit der Methode keep_flashdata() tun.


ist jedoch userdata() immer zur Verfügung, bis die Sitzung zerstört wird.

See: What is Session Data?


ich glaube, Sie die vollständige Dokumentation sollte lauten: Session Library

0

Zuerst sollten Sie wissen, was flashdata ist.

Der Sitzungswert wird nicht gelöscht, wenn er angerufen wird. Selbst wenn er für den nächsten Server-Anruf verfügbar ist und nicht für den zweiten Anruf verfügbar ist.

Als Beispiel: Angenommen, Sie zwei Funktion in einer Steuerung

function test1() 
{ 
    $this->session->set_flashdata('ext_data', 'test'); 
} 
function test2() 
{ 
    echo $this->session->userdata('ext_data'); 
    echo $this->session->userdata('ext_data'); 
    echo $this->session->userdata('ext_data'); 
} 

Nun, wenn Sie your_site_url/controller/test1 nennen es test für ext_data

Danach gesetzt wird, wenn Sie your_site_url/controller/test2 nennen es 3 mal test Wort gedruckt wird bedeutet, dass Sie diese Sitzungsvariable für diese Zeit so oft verwenden können, wie Sie möchten, aber für den nächsten Anruf (erneut drücken your_site_url/controller/test2) wird es leer sein.

Ich hoffe, Sie verstehen, was es bedeutet.

CodeIgniter unterstützt „flashdata“ oder Sitzungsdaten, die nur für die nächste Anforderung verfügbar sein wird, und wird dann automatisch gelöscht.

+0

Ich denke in test2() hast du Flashdata verpasst, aber du hast Userdata geschrieben, es ist verwirrend –