Laravel 6 Session和CSRF Cookies没有被设置 - 每次页面加载都会在Session DB中新建一个条目.

问题描述 投票:1回答:1

我是Laravel的新手, 我有一个Laravel 6的应用程序, 但它的会话并不像预期的那样. 每次我提交表单的时候都会出现419 - 页面过期的错误.

@csrf 每一个表单都包含了session, 所以这不是问题所在.

相反, 我看到的是 浏览器中既没有设置Session cookie,也没有设置XSRF-TOKEN cookie。. 然而,我确实看到每次加载页面时,会话都会在数据库中创建一个新的ID。

sessions.php配置文件是默认的。

    'driver' => env('SESSION_DRIVER', 'file'),
    'expire_on_close' => false,
    'encrypt' => false,
    'files' => storage_path('framework/sessions'),
    'connection' => env('SESSION_CONNECTION', null),
    'table' => 'sessions',
    'store' => env('SESSION_STORE', null),
    'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),
    'path' => '/',
    'domain' => env('SESSION_DOMAIN', null),
    'secure' => env('SESSION_SECURE_COOKIE', false),
    'http_only' => true,
    'same_site' => null,

VerifyCsrfToken.php中间件文件是默认的:

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
    ];
}

我在.env中修改的唯一会话变量是:

SESSION_DRIVER=database
SESSION_COOKIE=lsession
SESSION_LIFETIME=43200

除了确认 @crsf token包含在每一个表单中,我已经尝试过了。

  • 在多个浏览器中测试
  • 重启我的机器并再次尝试
  • 清理缓存 php artisan cache:clear && php artisan config:cache
  • 在文件和数据库会话驱动程序之间来回切换。

都不行。

还有什么原因会导致sessioncsrf cookies无法设置?

非常感谢!

php laravel session cookies session-cookies
1个回答
0
投票

<head>,最好是在你的 head.blade.php你加载的每一个刀片文件中都包含了这个文件,试着添加。

<meta name="csrf-token" content="{{ csrf_token() }}">

0
投票

这和表格没有任何关系。这是我的一个愚蠢的举动,所以把这个答案贴出来,以防其他人遇到同样的问题。

我在一个开口前有一个空格 <?php 标签。这个空间是在HTTP头之前发送给浏览器的,所以没有任何一个cookie被设置。

Doh!

© www.soinside.com 2019 - 2024. All rights reserved.