2012-10-28 9 views
17

Proszę spojrzeć na następujący kod:

$this->session->set_flashdata('message', 'This is a message.'); 
var_dump($this->session->flashdata('message')); 

zwraca bool(false) .

Mam nadzieję, że nie POTRZEBAredirect() być przywołania po tym, bo kilka razy muszę nazwać tuż po ustawieniu flashdata w widoku.


Edit po venkat „s komentarz

$this->session->set_flashdata('message', 'This is a message.'); 
$this->session->keep_flashdata('message'); 
var_dump($this->session->flashdata('message')); 

żadnej różnicy niestety.

+0

CodeIgniter obsługuje "flashdata" lub dane sesji, które będą dostępne tylko dla następnego żądania serwera, a następnie są automatycznie usuwane. Jeśli chcesz zachować dane flash przez dodatkowe żądanie, użyj tej $ this-> session-> keep_flashdata ("message"); Jeśli się mylę, daj mi znać ........... –

+0

Dziękuję kochany @Venkat, ale bez różnicy. Zaktualizowałem moje pytanie. –

+0

Prawdopodobnie flashdata jest dostępna tylko na żądanie następnego serwera? Oczywiście upewnij się, że sesja została poprawnie załadowana za pomocą klucza szyfrowania itp. – jtheman

Odpowiedz

21

Cóż, documentation ma rzeczywiście stwierdzić, że

CodeIgniter obsługuje „flashdata” lub dane sesji, które będą dostępne tylko dla następnego żądania serwera, a następnie są automatycznie wyczyszczone.

jako pierwsza rzecz, która z pewnością oznacza, że ​​należy wykonać nowe żądanie serwera. Przekierowanie, odświeżenie, łącze lub inny sposób, aby wysłać użytkownika do następnego żądania.

Dlaczego warto używać flashdata, jeśli używasz go w tym samym żądaniu? Równie dobrze mógłbyś nie używać flashdata lub używać zwykłej sesji.

+0

Przepraszam, tak, czytałem dokument po zadaniu mojego pytania !!! W każdym razie chciałbym móc użyć 'flashdata', ponieważ prawdziwym znaczeniem dla takich celów jest' flashdata', a nie normalna sesja. Innym powodem jest to, że teraz muszę go używać w bardziej ręczny sposób, ponieważ powinienem pomyśleć o rozbrojeniu sesji komunikatów po ich wyświetleniu. –

+1

Niekoniecznie - opcja polegałaby na [rozszerzeniu CI] (http://codeigniter.com/user_guide/general/core_classes.html) z własną biblioteką sesji, która umożliwia bezpośredni dostęp do flashdanych po ich ustawieniu. – Repox

14
// Set flash data 
$this->session->set_flashdata('message_name', 'This is my message'); 
// After that you need to used redirect function instead of load view such as 
redirect("admin/signup"); 

// Get Flash data on view 
$this->session->flashdata('message_name'); 
2

Zmień config.php:

$config['sess_use_database'] = TRUE; 

Do:

$config['sess_use_database'] = FALSE; 

to działa na mnie.

6

Aby ustawić flashdata trzeba przekierować funkcję kontrolera

$this->session->set_flashdata('message_name', 'This is test message'); 

//redirect to some function 
redirect("controller/function_name"); 

//echo in view or controller 
$this->session->flashdata('message_name'); 
2

Wyświetlanie wiadomości błyskowej po przekierować w CodeIgniter

w kontroler ustawiony ten

<?php 

public function change_password(){ 







if($this->input->post('submit')){ 
$change = $this->common_register->change_password(); 

if($change == true){ 
$messge = array('message' => 'Password chnage successfully','class' => 'alert alert-success fade in'); 
$this->session->set_flashdata('item', $messge); 
}else{ 
$messge = array('message' => 'Wrong password enter','class' => 'alert alert-danger fade in'); 
$this->session->set_flashdata('item',$messge); 
} 
$this->session->keep_flashdata('item',$messge); 



redirect('controllername/methodname','refresh'); 
} 

?> 

In Your View File Set this 
<script type="application/javascript"> 
/** After windod Load */ 
$(window).bind("load", function() { 
    window.setTimeout(function() { 
    $(".alert").fadeTo(500, 0).slideUp(500, function(){ 
     $(this).remove(); 
    }); 
}, 4000); 
}); 
</script> 

<?php 

if($this->session->flashdata('item')) { 
$message = $this->session->flashdata('item'); 
?> 
<div class="<?php echo $message['class'] ?>"><?php echo $message['message']; ?> 

</div> 
<?php 
} 

?> 

Proszę sprawdzić poniżej linku do Displaying a flash message after redirect in Codeigniter

-1

Zestaw:

$config['sess_use_database'] = TRUE; 

Do:

$config['sess_use_database'] = FALSE; 

To działa dobrze.

Powiązane problemy