php - Enviar solicitud en Laravel 5.7, laravel 5.8-Error-419 Lo sentimos, su sesión ha caducado




(16)

Instalé Laravel 5.7

Se agregó un formulario al archivo \resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

Añadido al archivo \routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

Después de enviar una solicitud POST:

419 Lo sentimos, tu sesión ha expirado. Por favor, actualice y pruebe de nuevo.

En la versión 5.6 no hubo tal problema.


caso 1: si está ejecutando un proyecto en su sistema local como 127.0.01: 8000,

entonces

agrega SESSION_DOMAIN= en tu archivo .env

o en su config / session.php 'domain' => env('SESSION_DOMAIN', ''),

y luego ejecute php artisan cache:clear

caso 2: si el proyecto se está ejecutando en un servidor y tiene un dominio como "mydomain.com"

agregue SESSION_DOMAIN=mydomain.com en su archivo .env

o en su config / session.php 'domain' => env('SESSION_DOMAIN', 'mydomain.com'),

y luego ejecute php artisan cache:clear


¿Qué hay de usar

{{ csrf_field() }} lugar de @csrf

El error 419 se debe principalmente a problemas con el token csrf.


Después de tanto tiempo lo tengo resuelto de esta manera.

Mi ruta de instalación de laravel no era la misma que la configurada en el archivo de configuración session.php

'domain' => env('SESSION_DOMAIN', 'example.com'),

En mi caso, es muy ridículo. Recibo el error 419 cuando coloco Auth::routes() route Auth::routes() en la parte superior del archivo de ruta.

Auth::routes();

Route::middleware('auth')->group(function () {
    Route::get('/', '[email protected]')->name('dashboard');
});

Y arreglé el error moviendo Auth::routes(); a la parte inferior del archivo de ruta.

Route::middleware('auth')->group(function () {
    Route::get('/', '[email protected]')->name('dashboard');
});

Auth::routes();

Tal vez pueda ayudar a su caso también. Buena suerte.


En tu Http/Kernel.php

intenta comentar esta linea:

\Illuminate\Session\Middleware\AuthenticateSession::class,

en su matriz de middleware web

podría ser la raíz de tu problema



He tenido un problema similar y encontré una solución a eso.

si está haciendo eco o imprime algo desde el controlador mientras vuelve para ver este problema, aparecerá un mensaje emergente.

así que asegúrese de que no esté utilizando eco o impresión cuando su controlador regrese


Intente comentar fuera \App\Http\Middleware\EncryptCookies::class in \app\Http\Kernel.php Tengo un problema similar y lo resolví al hacerlo. Probablemente no sea la mejor solución porque la seguridad pero al menos funcionó.

Anteriormente lo intenté:

  • Limpiar cache
  • Generar nueva clave de aplicación
  • Ejecutar mi aplicación en varios navegadores (Chrome 70, Mozilla Firefox 57 e IE 11)
  • Ejecutar mi aplicación en otra computadora
  • Comentario \App\Http\Middleware\VerifyCsrfToken::class in \app\Http\Kernel.php
  • Comentario out \Illuminate\Session\Middleware\AuthenticateSession::class in \app\Http\Kernel.php
  • Actualizar y rebajar Laravel (entre 5.6 y 5.7)

Pero ninguno de estos anteriores funcionó para mí.

EDITAR

Mi caso aquí es cada vez que inicio sesión, se creará un nuevo archivo de sesión (el anterior aún se conserva, pero se olvida repentinamente. Revise el storage/framework/sessions ) y se genera un nuevo token CSRF. Entonces el problema no es con VerifyCsrfToken.

Como @Vladd mencionó en la sección de comentarios, nunca debe comentar out \App\Http\Middleware\VerifyCsrfToken::class . Debe comprobar que envió el token de CSRF correcto al servidor.


No puede hacer un retorno vacío en Laravel 5.6 o mayor. Laravel siempre espera que se devuelva un valor. (Lo sé por experiencia pasada). Esto se debe principalmente a cómo PHP 7 maneja los rendimientos vacíos.


Por defecto no tuve este problema. Entonces, lo que hice es chmod -R 644 sessions para replicar el problema.

Luego le di permisos a la carpeta de sesiones por chmod -R 755 sessions

Ahora mi código de proyecto funciona de nuevo.

La razón por la que sucede es que almacena su caché en un archivo con falta de permisos de escritura.

El archivo de configuración de la sesión se almacena en config / session.php. Asegúrese de revisar las opciones disponibles para usted en este archivo. De forma predeterminada, Laravel está configurado para usar el controlador de sesión de archivo, que funcionará bien para muchas aplicaciones. En aplicaciones de producción, puede considerar el uso de los controladores memcached o redis para un rendimiento de sesión aún más rápido.

Soluciones:

1 - Como he corregido anteriormente, puede otorgar 755 permisos a la carpeta de sesiones. 2 - Puede utilizar otra configuración de controlador de sesión.

archivo - las sesiones se almacenan en almacenamiento / marco / sesiones. cookie: las sesiones se almacenan en cookies seguras y encriptadas. Base de datos: las sesiones se almacenan en una base de datos relacional. memcached / redis: las sesiones se almacenan en una de estas tiendas rápidas basadas en caché. array: las sesiones se almacenan en un array PHP y no se conservarán.

Tener en cuenta; Si desea utilizar memcached / redis, debe tenerlos instalados en su servidor o su contenedor de redis docker debe estar ejecutándose.


Solo cambia .env SESSION_DRIVER = cookie


Solo para ponerlo ahí afuera, tuve los mismos problemas. En mi granja local funcionaría como se esperaba, pero después de enviarlo al servidor de desarrollo también recibí el mensaje de tiempo de espera de sesión. Pensando que es un problema de entorno, cambié de apache a nginx y eso hizo que el problema desapareciera milagrosamente.


Tengo este problema hace mucho tiempo. Recordé que causa permiso de storage/framework/sessions . Es posible que desee cambiarlo mediante el comando chmod -R 0777 storage/framework/sessions . Funciono para mi


Un rápido mal enfoque es que vaya a app \ http \ middleware \ verifycsrftoken.php y agregue la ruta en $ excepto la lista. La solicitud posterior será ignorada para la verificación del token CSRF.

protected $except = [
    //
    'doLogin.aspx',
    'create_coupon',
];

cambie su @csrf en welcome.blade.php a <input type="hidden" name="_token" value="{{ csrf_token() }}">

así su código de esta manera:

<form method="POST" action="/foo" >
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>

   <button type="submit">Submit</button>
</form>

Antes de leer a continuación, asegúrese de tener @csrf o {{ csrf_field() }} en su formulario como

<form method="post">
@csrf <!-- {{ csrf_field() }} -->
... rest of form ...
</form>

Aparece el mensaje de error de la sesión caducada porque en algún lugar falla la verificación del token csrf, lo que significa que la App\Http\Middleware\VerifyCsrfToken::class middleware ya está activada. En la forma ya se ha agregado la directiva de blade @csrf , que también debería estar bien.

Luego la otra área a revisar es la sesión. La verificación del token de csrf está directamente relacionada con su sesión, por lo que es posible que desee verificar si el controlador de su sesión funciona o no, por ejemplo, un Redis configurado incorrectamente puede causar un problema.

Tal vez pueda intentar cambiar su controlador / software de sesión de su archivo .env , los controladores compatibles se indican a continuación

Controladores de sesión compatibles en Laravel 5.7 (Doc Link)

  • file - las sesiones se almacenan en almacenamiento / marco / sesiones.
  • cookie : las sesiones se almacenan en cookies seguras y encriptadas.
  • database : las sesiones se almacenan en una base de datos relacional.
  • memcached / redis : las sesiones se almacenan en una de estas tiendas rápidas basadas en caché.
  • array : las sesiones se almacenan en un array PHP y no se conservarán.

Si su formulario funciona después de cambiar el controlador de sesión, entonces hay algún problema con ese controlador en particular, intente corregir el error desde allí.

Posibles escenarios propensos a errores

  • Es probable que las sesiones basadas en archivos no funcionen debido a los problemas de permisos con el directorio /storage (una búsqueda rápida en Google le traerá la solución)

  • En el caso del controlador de la base de datos, su conexión de base de datos podría ser incorrecta o la tabla de sessions podría no existir o configurarse de manera incorrecta (se confirmó que la parte de configuración incorrecta era un problema según el comentario de @Junaid Qadir).

  • redis/memcached configuración de redis/memcached es incorrecta o está siendo manipulada por algún otro código en el sistema al mismo tiempo.

Podría ser una buena idea ejecutar la php artisan key:generate y generar una nueva clave de aplicación que, a su vez, vaciará los datos de la sesión.

Borrar el caché del navegador DURO , encontré que Chrome y Firefox son los culpables más de lo que puedo recordar.

Lea más acerca de por qué las claves de aplicación son importantes







laravel