Session funktioniert nicht in der middleware Laravel 5
Ich versuche zu arbeiten mit Sessions in Laravel 5 Middleware, aber Sie funktionieren nicht.
Spezifisch - var_dump(Session::all());
zu Beginn der handle-Methode gibt mir array mit einem Wert - _tokken, dann am Ende dieser Methode
Session::put('lang',$locale);
var_dump(Session::all());
Gibt mir array mit zwei Werten, _tokken und meine lang key, aber nach der Aktualisierung seiner die gleichen, wie ich Sie verstehe, sollte es das gleiche sein Ergebnis nach der zweiten refresh.
Ich dachte, vielleicht habe ich mein middleware geladen, bevor die Session-middleware, die wahr war, dann habe ich gewechselt und jetzt ist mein Kernel.php sieht so aus -
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
'App\Http\Middleware\Language',
];
Also Frage ich - was mache ich falsch?
Edit: Graben Beleuchten\Session\Middleware\StartSession ich fand diese -
//Note that the Laravel sessions do not make use of PHP "native" sessions in any way since they are crappy.
als Kommentar, also meine Tests mit session_status() ist nicht relavent.
- Ich gerade entfernt meine Antwort, denn es war falsch. Getestet habe ich
Session::all()
im middleware von meinem Projekt und es funktioniert gut. Sorry für die falsche Antwort. - keine Sorge, ja, ich schrieb, dass die Session::all() gibt _token, aber nicht später meinen eigenen Wert
- bei mir klappt es wie erwartet, d.h. _token, _previous und meine benutzerdefinierte Werte
- vielleicht könnten Sie Ihr Projekt freigeben, oder so? oder mir helfen, im privaten?
- Haben Sie diese arbeiten?
- Ich hatte ein ähnliches problem, so landete ich nur mit
Config::set()
in der middleware, und dann mitConfig::get()
dort, wo ich die Werte an anderer Stelle. Funktioniert einwandfrei.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
Wann immer Sie wollen zu speichern Sie die änderung, so können sagen, ich will speichern, um die Sprache des Benutzers
Wenn Sie die refresh-jetzt finden Sie Ihren neu erstellten Schlüssel.
save
Methode ist nicht notwendig, in Laravel 5.2redirect()->route('myroute')->send()
es nicht speichern session-Daten, so sollten SieSession::save();
vor.Ich hatte das gleiche problem, ich war mit Sessions zu speichern, das Gebietsschema bei der Anmeldung, dann Umleitung auf die Haupt-dashboard, aber wenn die middleware geladen wird, wird die Sitzung nicht eingeleitet noch nicht. Also, es würde nicht funktionieren.
Lassen Sie mich zuerst sagen, ich bin nicht Laravel-Experte, aber dieser Weg funktioniert in Laravel 5.3:
1) php artisan machen:middleware SetApplicationLanguage
2) Fügen Sie diese zu app/Http/Kernel.php $middlewareGroup variable:
Beachten Sie, dass diese neue Middleware kommt NACH der StartSession Klasse.
3) Dies ist meine app/Http/MiddleWare/SetApplicationLanguage.php:
Feststellen, dass ich nicht verwenden-Sitzung, in der es in diesem Beispiel. Das ist, weil wenn ich meinen Middleware NACH der StartSession Klasse, Sitzung, arbeiten würde, aber Auth::user() wieder zur Verfügung, so konnte ich nur verwenden Auth::user()->locale und keine Notwendigkeit, für Sitzungen zu allen.
Aber Sie könnten es tun, einfach zu verwenden App::setLocale(Session::get('locale')) statt und der Ursache enthalten die Session-Fassade.
Wenn Sie die Sitzung in Ihrem aktuellen middleware fand ich eine(n) (hässlichen) workaround.
$response = $next($request);
Linie und chang diereturn $response;
Linie zureturn $next($request);
Ich hatte das gleiche problem. @WoodyDRN gesagt, Sie müssen hinzufügen StartSession middleware, um Ihre kernel-Datei an, aber es ist nicht der beste Weg, um dieses problem zu lösen. Also, Woher soll ich das wissen? Da fügte ich hinzu und fordern die Validierung system ist kaputt.
Beste Weg, um dieses problem zu lösen, indem Sie Ihre Sprache middleware zu web-middleware-array
Andere Sache zu beachten, wenn Sie einige middleware, die die Manipulation/das abrufen von Daten aus der session, die Sie benötigen, um sicherzustellen, dass es geladen, nachdem
StartSession
web-middleware.Ich hatte das gleiche problem, ich war Einstellwert in Middleware und lösche im selben Ort, wenn eine bestimmte Bedingung wahr ist.
Ich Total vergaß 404, einige Dateien war immer 404 (fehlende Bilder), so nginx wurde die übergabe-Anforderung zu Laravel-app, um zu zeigen, 404-Seite, und weil es war eine andere url war ich lösche es. Ich denke, es ist das gleiche Problem mit der Speicherung von Sprache in Sachen session. Überprüfen Sie einfach Ihren browser networking und sehen, welche Anforderungen werden beim laden der Seite, Sie könnte das setzen und löschen gleichzeitig