it-swarm.com.de

laravel 5.5 Die Seite ist aufgrund von Inaktivität abgelaufen. Bitte aktualisieren Sie und versuchen Sie es erneut

Ich bin neu bei Laravel und habe ein Problem, das ich nicht verstehe ... Ich habe ein Protokoll in meinem Projekt und meine Methode ist POST. Wenn ich eine Anfrage versuche, lautet das Ergebnis: 'Die Seite ist aufgrund von Inaktivität abgelaufen. Bitte aktualisieren Sie erneut und versuchen Sie es erneut. ' , aber wenn ich die Methode in GET ändere, funktioniert es gut. Kann mir jemand sagen, warum das so ist und wie ich es reparieren kann, weil ich natürlich eine Post-Methode brauche.

54
Svetlozar

Dieses Problem rührt von der fehlgeschlagenen Überprüfung des CSRF-Tokens her. Entweder Sie veröffentlichen keine oder Sie schreiben eine falsche.

Der Grund für GET ist, dass für eine GET-Route in Laravel kein CSRF-Token gepostet wird.

Sie können entweder ein CSRF-Token in Ihrem Formular posten, indem Sie Folgendes aufrufen:

{{ csrf_field() }}

Oder schließen Sie Ihre Route in app/Http/Middleware/VerifyCsrfToken.php aus (NICHT EMPFOHLEN aufgrund der Sicherheit):

protected $except = [
    'your/route'
];
148
Erik Baars

In meinem Fall habe ich dieselbe Fehlermeldung erhalten und habe dann herausgefunden, dass ich csrf_token für das Formularfeld nicht hinzugefügt habe. Fügen Sie dann den csrf_token hinzu.

Mit Formularhelfer, der sein wird,

{{ csrf_field() }}

Oder ohne Formularhelfer, der sein wird,

<input type="hidden" name="_token" value="{{ csrf_token() }}">

Wenn das nicht funktioniert, dann-

Aktualisieren Sie den Browser-Cache  

und jetzt könnte es funktionieren, danke.

Update für Laravel 5.6  

Laravel integriert neuen @csrf anstelle von {{ csrf_field() }}. Das sieht jetzt schöner aus.

<form action="">
   @csrf
   ...
</form>
29

Bei der Definition eines HTML-Formulars in Ihrer Anwendung sollten Sie ein ausgeblendetes CSRF-Tokenfeld in das Formular einfügen, damit die CSRF-Schutz-Middleware die Anforderung überprüfen kann. Sie können den Helper csrf_field verwenden, um das Tokenfeld zu generieren:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

Es funktioniert nicht, dann Aktualisieren Sie den Browser-Cache und jetzt kann es funktionieren, 

Für weitere Informationen öffnen Sie den Link: - CSRF-Schutz in Laravel 5.5

UPDATE:

Mit Laravel 5.6 mit Blades-Vorlagen ist das ganz einfach.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

Für weitere Informationen öffnen Sie den Link: - CSRF-Schutz in Laravel 5.6

7
Udhav Sarvaiya

Stellen Sie sicher, dass Ihre Datei config/session.php diese Zeile enthält 

'domain' => env('SESSION_DOMAIN', null),

Entfernen Sie dann die SESSION_DOMAIN-Zeile in Ihrer .env-Datei

3
Youssouf Cherif

Dies geschieht, weil Sie die standardmäßige CSRV-Middleware aus der Installation von Laravel verwenden. Um dieses Problem zu lösen, entfernen Sie diese Zeile aus Ihrer Kernel.php:

\App\Http\Middleware\VerifyCsrfToken::class,

Dies ist in Ordnung, wenn Sie eine API erstellen. Wenn Sie jedoch eine Website erstellen, handelt es sich um eine Sicherheitsüberprüfung. Beachten Sie daher die Risiken.

Erprobte verschiedene Lösungen, um das Problem mehrere Wochen ohne Erfolg zu lösen.

Das Problem, vor dem ich stand, wurde durch ein Upgrade von Laravel 5.0 auf 5.5 verursacht und das Update von config/session.php vergessen

Wenn jemand mit dem Problem konfrontiert ist, versuchen Sie, die Datei config/session.php auf die Version von Laravel zu aktualisieren, die Sie ausführen

2
Rayton Kiwelu

Platzieren Sie {{csrf_field()}} in Ihrem form-Tag

 enter image description here

2
Wael Assaf

ich hatte das gleiche Problem. Verwenden Sie "klare Browserdaten" in Chrome. Vielleicht lösen Sie Ihr Problem.

wenn Ihre Konfiguration festgelegt ist: SESSION_DRIVER = Datei, müssen Sie überprüfen, ob Ihr Sitzungsverzeichnis schreibbar ist. Überprüfen Sie den Speicher/Rahmen/Sitzung

1

Ich war mit dem gleichen Fehler konfrontiert, also habe ich diese Zeile aus meiner .env-Datei entfernt

SESSION_DRIVER = Ihre Website.de

1
Akash Sethi

Fügen Sie diesen Code einfach in das Formular ein 

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />
1
Manu Joseph

In meinem Fall habe ich ob_start () hinzugefügt. oben auf meinem index.php auf dem Server und alles scheint gut zu funktionieren.

1
Ayan Mohammad

Wenn Sie bereits das CSRF-Token in Ihr Formular aufgenommen haben. Dann erhalten Sie die Fehlerseite möglicherweise aufgrund von Cache-Daten in Ihrem Formular. Öffnen Sie Ihre Terminal-/Befehlseingabeaufforderung und führen Sie diese Befehle im Projektstammverzeichnis aus.

  1. pHP-Handwerker-Cache: klar 
  2. pHP Handwerker Config: klar 
  3. php handwerker weg: klar 
  4. php Handwerkeransicht: klar

Versuchen Sie auch, den Browser-Cache leeren zusammen mit diesen Befehlen zu löschen.

1

Wenn Sie dieses Problem weiterhin haben, verwenden Sie den folgenden Code in Ihrem Formular:.

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';
1

URIs vom CSRF-Schutz ausschließen:

Manchmal möchten Sie möglicherweise eine Reihe von URIs vom CSRF-Schutz ausschließen. Wenn Sie beispielsweise Stripe zum Verarbeiten von Zahlungen verwenden und das Webhook-System verwenden, müssen Sie die Route Ihres Stripe-Webhook-Handlers vom CSRF-Schutz ausschließen, da Stripe nicht weiß, welches CSRF-Token an Ihre Routen gesendet werden soll.

Normalerweise sollten Sie diese Arten von Routen außerhalb der Web-Middleware-Gruppe platzieren, die der RouteServiceProvider auf alle Routen in der Datei routes/web.php anwendet. Sie können die Routen jedoch auch ausschließen, indem Sie ihre URIs zur Eigenschaft $ except der VerifyCsrfToken-Middleware hinzufügen:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}
0
Kamlesh

Es ist lustig, aber es funktioniert für mich. Ich erkannte, dass dies aufgrund von Standard-HTML-Tags im Laravel-Code verursacht wird. .__ Verwenden Sie stattdessen/* */oder {{- -}}

Oder versuchen Sie, vor kurzem Html Coment in Ihrem Code zu entfernen ... Oder ändern Sie den HTML-Kommentar in PHP-Kommentar ....__ oder versuchen Sie, den Befehl Any Worng artisan wie den PHP-Browser sauber zu starten Daten zusammen mit dem Fehler ...

0
samtax01

wenn Sie Formularaktion mit Javascript ändern müssen, haben Sie dasselbe Problem 

1 .first Sie müssen anstelle von {!!Form::open() !!} {!! close() !!} in Laravel .__ verwenden.
2 .Sekunde Sie beginnen Ihre Aktion am häufigsten mit https://www.example.com +your Route

Nicht vergessen, www in Ihrer URL !!!

0
Mohammad Khan
  1. Es kann sein, dass das Csrf-Token nicht in Ihrem Formular vorhanden ist. Sie müssen @crsf oder {{ csrf_field() }} verwenden

  2. Wenn Sie csrf in Ihrem Formular verwenden. Es kann Cache sein. Löschen Sie Ihren App-Cache.

    pHP-Handwerker-Cache: klar

    php Handwerkeransicht: klar

    pHP-Handwerker-Cache: klar

    Und leeren Sie Ihren Browser-Cache.

    1. Wenn Fehler erneut angezeigt werden, erstellen Sie einen neuen Schlüssel

pHP Handwerker Schlüssel: generieren

0
Turan Zamanlı

Ich hatte das gleiche Problem, ich habe viele Lösungen ausprobiert. aber keiner hat für mich gearbeitet. Dann fand ich heraus, dass ich aus irgendeinem Grund dies in meiner .env-Datei verwendete:

SESSION_DOMAIN = myapp.me

und sobald ich es wieder auf null stellte, funktionierte alles einwandfrei.

0
Ahmed Marzouk

mein Problem wurde durch das Hinzufügen von @csrf im Formular-Tag gelöst

Laravel 5.6 unterstützt {{ csrf_field() }} nicht, sondern füge @csrf anstelle von {{ csrf_field() }} hinzu.

larvel_fix_error.png

0
mysticmeelone

In meinem Fall wurde dasselbe Problem verursacht, weil ich vergessen hatte, > am Ende meines ausgeblendeten Eingabefelds hinzuzufügen, wie folgt: <input type="hidden" name="_token" value="{{ Session::token() }}" 

Also habe ich es behoben, indem ich es hinzugefügt habe:

<input type="hidden" name="_token" value="{{ Session::token() }}">
0
Kaloyan Drenski

Wir haben es funktioniert indem Sie die Routen von Router.php kopieren anstatt Auth :: routes () zu verwenden, sind dies die Routen, die Sie brauchen:

Route::get('login', 'Auth\[email protected]')->name('login');
Route::post('login', 'Auth\[email protected]');
Route::post('logout', 'Auth\[email protected]')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\[email protected]')->name('register');
Route::post('register', 'Auth\[email protected]');

// Password Reset Routes...
Route::get('password/reset', 'Auth\[email protected]')->name('password.request');
Route::post('password/email', 'Auth\[email protected]')->name('password.email');
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
Route::post('password/reset', 'Auth\[email protected]');
0
Notflip

Ich weiß, dass diese Frage zufriedenstellend beantwortet wurde, aber ich wollte eine Lösung erwähnen, die in meinem Fall funktionierte. Ich habe {{ csrf_field() }} hinzugefügt und es hat immer noch nicht funktioniert. 

Dann fiel mir ein, dass ich alle Cookies für Entwicklungszwecke blockiert habe. Dies kann nett sein, wenn Sie die Seite wechseln und sie aktualisieren möchten.

Nachdem ich die Einstellungen geändert hatte, um das Blockieren aller Cookies in MS Edge browser zu beenden, wurde das Problem behoben.

0
ghostcoder23x

Fügen Sie zunächst csrf in Ihr Formular ein.

{{ csrf_field() }}

wenn sich das Problem nicht gelöst hat, verwenden Sie ob_start(); ganz am Anfang von index.php.

<?php ob_start();
0
Abid Shah

Fügen Sie einfach @csrf in Ihr Formular-Tag ein.

Oder Sie können csrf_token in die Kopfzeile einfügen, um es mit jeder Anfrage zu senden.

0
Shaz