2014-07-23 17 views
5

Ho un problema con Session che non persisterà.Sessione non funzionante in Laravel 4

controller Ho una funzione che carica un articolo per l'editing

public function getEdit($id) 
{ 
    try { 
     $news = News::findOrFail($id); 
     View::share('title', Lang::get('admin.editNews').": ".$news->title); 
     View::share('news', $news); 
     $this->layout->content = View::make('news.editNews'); 
    } catch (Exception $e) { 
     Session::flash('message', Lang::get('admin.noSuchNews')); 
     Session::flash('notif', 'danger'); 
     return Redirect::to("news"); 
    } 
} 

E ho un'altra funzione - indice, che dovrebbe visualizzare questi messaggi flash.

public function getIndex() 
{ 
    var_dump(Session::get('message')); 
} 

La sessione non è solo persistente. Non funziona con Session::flash, non funziona con Session::put.

Session::get('message') è sempre null.

Credo che dovrei dire che ho fatto domanda di routing in questo modo:

Route::controller('news', 'NewsController'); 
+0

è 'getEdit' davvero chiamato prima di' getIndex'? –

+0

Sì. Lo so perché se 'News :: findOrFail ($ id)' non fallisce caricherà la vista, e se le notizie non vengono trovate dovrebbe andare a 'catch'. Anche questo funziona. Ho provato echo '$ e-> getMessage()' –

+0

Hai provato 'Redirect :: to ('news') -> con ('message', 'your_message');'? – Needpoule

risposta

3

Ok, ho risolto questo.

La cosa è, che ho messo in session.php file di questo

'domain' => '.mydomain.com', 

Ma poiché applicazione è ancora in localhost, il tutto con la sessione stava venendo a mancare, anche se non stavo usando cookie come il mio autista sessione.

Quando ho cambiato questo per

'domain' => '', 

tutto ha iniziato a lavorare

+0

Ho seguito la tua soluzione. Ma non funziona per me. – 2plus

0

Si consiglia di controllare le impostazioni della sessione descritte al http://laravel.com/docs/session#session-drivers.

Il modo più semplice è utilizzare i cookie per le sessioni (e assicurarsi che i cookie siano abilitati nel browser).

Se si utilizza file per l'archiviazione delle sessioni, assicurarsi che il percorso di archiviazione definito in app/config/session.php sia scrivibile.

+1

Sto usando il driver del database e ogni richiesta crea una nuova riga lì. Alcune richieste creano addirittura due righe nella tabella di sessione –

+1

Sì. È scrivibile. Ma ancora non funziona. – 2plus

5

Controlla la tua lo stato di ritorno della impostazione della sessione nel controller funzioni. Assicurati che restituisca qualcosa anche se è un semplice null.

Ho appena avuto lo stesso problema e questo lo ha risolto. Sono stato in grado di utilizzare il seguente bene:

Route::get('session', function(){ 
    Session::put('current_user', 'Lionel Morrison'); 
    Session::put('user_id', '12345'); 

    var_dump(Session::all()); 
}); 

Route::get('get', function() { 
    var_dump(Session::all()); 
}); 

, ma quando l'ho usato in un controllore in questo modo non ha funzionato fino a quando sono tornato un null;

public function setsession() { 
    Session::put('cat', 'Tom'); 
    Session::put('mouse', 'Jerry'); 

    return null; 
} 

public function getsession() { 
    dd(Session::all()); 
} 
+1

Mi piacerebbe davvero sapere perché potrebbe funzionare? – Juddling

+0

Non so, ma lo fa. –

+0

restituire null ha fatto per me! Grazie –

2

Se si scopre che la sessione non è il risparmio in modo corretto, provare a chiamare Session::save() esplicitamente per costringerlo a risparmiare.

0

Se si tenta di accedere utilizzando "Auth :: loginUsingId()" api anziché "Auth :: attempt()" api, distruggerà la sessione per un'altra richiesta. Quindi ti raccomando, usa il driver "cookie" invece di "file" di session.php (config \ session.php \ driver)

0

per laravel 4.2

goto app/config dir

modificare app.php

'url' => 'localhost', 

modificare session.php

'driver' => 'file', 
'cookie' => 'sitename_session', 
'domain' => null, 
'secure' => false,