Laravel 5.3 不通过 apache 保存会话

Laravel 5.3 not saving sessions via apache

我收到 CSRF 令牌不匹配,但这不是根本问题。当我向页面添加异常时,出现 500 错误。

我发现这是由创建会话的问题引起的。

当我服务时一切正常。当我将其投入生产时,它无法创建会话。

有没有人以前遇到过这个问题?

我收到的错误:

1/1
TokenMismatchException in VerifyCsrfToken.php line 68:
in VerifyCsrfToken.php line 68
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Router.php line 655
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 629
at Router->dispatchToRoute(object(Request)) in Router.php line 607
at Router->dispatch(object(Request)) in Kernel.php line 268
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
at Pipeline->then(object(Closure)) in Kernel.php line 150
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 117
at Kernel->handle(object(Request)) in index.php line 53

然后我将登录路由添加到 CSRF 异常,我收到 500 错误。

namespace App\Http\Middleware;

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

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
        '/login/',
    ];
}

Googlechrome错误信息:

This page isn’t working

'address' is currently unable to handle this request.
HTTP ERROR 500

运行 CentOS 7.0 和 SElinux 阻止 apache 用户写入存储。即使您为此目录设置了 chmod 777,它也不允许您写入存储目录。

存储文件夹是存储会话的地方,因此它会抛出 csrf 令牌不匹配,因为它与会话变量关闭没有可比性。

我想强调这是一个配置问题,而不是 laravel 问题。我在互联网上广泛搜索,这终于解决了我的问题。

setenforce 0

这应该允许写入,但您已经关闭了服务器范围内的附加安全性。那很糟。恢复 SELinux

setenforce 1

然后最后使用SELinux允许从项目根目录使用这个命令写入文件。

chcon -R -t httpd_sys_rw_content_t storage

我要感谢评论部分的每个人,你们的提问让我走上了解决方案的正确轨道!