【发布时间】:2019-11-22 06:32:06
【问题描述】:
我在由 Nginx 提供的 VPS ubuntu 上安装了 Laravel,它在那里正常工作。 PHP 是 php-fpm7.0
现在我把它转移到一个 CPanel 主机上,问题就开始了。它现在和过去都在使用 Cloudflare。
Laravel 版本:5.3.13
PHP 版本:已测试 5.6、7.0、7.1、7.2
我收到 TokenMismatch 错误,因为没有设置 cookie 和会话。
.env 包含:
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
config/session.php:
<?php
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'store' => null,
'lottery' => [2, 100],
'cookie' => 'k_session',
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => false,
'http_only' => true,
];
storage/framework/sessions chmod 是 777,我看到每次请求后都会在那里创建一个文件。但是什么都没有发送到浏览器。
我也尝试了Cookie::make(...) 和session(['a' => 'b']),但在浏览器标题中仍然一无所获。那里只有 cloudflare 标头。
我还测试了不同的 SESSION_DOMAIN 。 http://example.com、https://example.com、example.com、null,但它们都不起作用。 (有些页面在 http 中,有些在 https 中,它们都没有发送 cookie)
提示:我将 session_start(); 放在 index.php 文件中,我可以在脚本中使用 $_SESSION[] 设置会话,但我知道 laravel 有自己的会话驱动程序,这不是解决方案。
【问题讨论】:
-
你能展示你的路线定义吗?
-
@Jerodev 它太大了,但出于测试目的,我制作了
Route::get('test', function(){return 1;});。它没有网络中间件,但网络中间件通过RouteServiceProvider.php附加到所有web.php路由
标签: php laravel cookies session-cookies setcookie