2016-06-23 3 views
0

Ich habe einen Controller, der eine Umleitung Funktion hat:Laravel 5.2.32: Session Blitz funktioniert nicht mit Redirect

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 

    return Redirect::to('previousroute')->with('data', $data); 
} 

Diese previousroute wird durch otherControllerMethod() wie so behandelt:

public function otherControllerMethod() 
{ 
    $data = Session::get('data'); 

    return $this->makeView($data); 
} 

Leider vergisst Laravel diese Sitzungsdaten. Das habe ich schon oft gemacht und ich habe noch nie gesehen, dass nach einer einzigen Weiterleitung die Session-Flash-Daten vergessen wurden. Was geht hier vor sich? Ich habe versucht, "Web" Middleware hinzuzufügen und zu entfernen, aber nichts funktioniert. Wenn jemand weiß, warum das passiert, lass es mich wissen.

+0

Ich habe ein ähnliches Problem ein paar Mal erlebt. Können Sie überprüfen, ob das Problem darin besteht, dass Sie bei jeder Anfrage eine neue Sitzung erhalten? In meinem Fall war das Problem mit Varnish verbunden. Varnish umging nicht einen Cookie zu ngnix, der jedes Mal zu einer neuen Sitzung wurde. In diesem Fall gibt es ein paar Workarounds: Optimieren Sie Ihr Lack-Setup oder fügen Sie einen speziellen Header hinzu, um den Lack dazu zu zwingen, Kekse zu umgehen. Hoffe es bringt etwas Licht. – jhmilan

+0

Keiner der angezeigten Codes setzt Session- oder Flash-Daten. – patricus

+0

Patricus - das ist eigentlich nicht wahr. Eine redirect() - Methode, die die with() -Methode verwendet, führt Flash-Daten aus. Siehe: https://laravel.com/docs/5.2/responses#redirecting-with-flashed-session-data –

Antwort

0

In myControllerMethod übergeben Sie die data obj/var als eine Anfrage.

In otherControllerMethod anfordern Sie die Sitzungsdaten, die nicht festgelegt ist.

Um Daten an die Sitzung setzen Sie tun sollten:

Session::put('data','value') 

und dann wird es mit zur Verfügung:

Session::get('data'); 
0

ich vor das gleiche Problem gehabt haben. Grundsätzlich musste ich send Funktion bei der Umleitung mit Redirect Fassade aufrufen. So müssen Sie Ihre myControllerMethod ändern:

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 
    return Redirect::to('previousroute')->with('data', $data)->send(); 
} 

Als send() Funktion der Klasse Symfony\Component\HttpFoundation\Response die Funktion aufruft sendContent(), die die Daten sendet, wenn umgeleitet wird.

Hoffe, das hilft.

2
use Session; 

public function myControllerMethod() 
{ 
    $data = $this->blabla(); 
    Session::set('data', $data); 
    return Redirect::to('previousroute')->with('data', $data); 
} 

public function otherControllerMethod() 
{ 
    $data = Session::get('data'); 

    return $this->makeView($data); 
} 

Versuchen Sie so. Verwenden Sie die Sitzung und legen Sie die Daten in der Sitzung fest, und holen Sie sie von wo Sie möchten.