【问题标题】:Why Laravel5.4 $request->cookie('key') is empty when PHP global var $_COOKIE has cookies为什么 Laravel5.4 $request->cookie('key') PHP global var $_COOKIE 有 cookie 时为空
【发布时间】:2017-08-10 00:18:11
【问题描述】:

我正在尝试读取 Laravel5.4 中的 cookie。因此,在通过第三方授权服务器成功验证后,我得到了 cookie。我没有在 laravel5.4 中制作 cookie,但我正在读取从视图/前端发送给我的 cookie 值。我可以在 Chrome 调试器环境以及 PHP 全局变量 $_COOKIE 中看到 cookie 的值。它们都设置正确。

但是,当我尝试使用控制器方法中的 $request->cookie('key') 读取相同的 cookie 时......它什么也没显示。我还尝试了 Cookie 门面来读取值,但仍然一无所获。此控制器正在处理由第三方 oauth 服务器调用的重定向路由,当此服务器重定向到我的 URL 时,它还会设置 cookie。

我在 Laravel5.4 的 web.php 文件中没有正确设置这个重定向 url 路由吗?这是在 web.php 中的定义如下:

Route::get('login/okta/callback', 'Auth\LoginController@handleProviderCallback');

我转储内容时请求对象为空,但 $_COOKIE 有数据。

【问题讨论】:

    标签: laravel laravel-5.4


    【解决方案1】:

    Laravel 的 cookie 类对其 cookie 的值进行加密和解密(参见 App\Http\Middleware\EncryptCookies 中间件)。当你让它查看一个它没有设置的 cookie 时,它​​会尝试(但失败)解密它。

    如果你从 Laravel 外部设置了一个 cookie,请使用 $_COOKIE 来处理它,或者将 cookie 的名称添加到 app/Http/Middleware/EncryptCookies.php 中的 $except 数组中,这样它就不会被弄乱了。

    【讨论】:

    • ceejayoz - 顺便说一句,您能否为您的第一段提供一些解释?我不太明白你想说什么。
    • @Andy 默认情况下,Laravel 会加密所有 cookie。这也意味着它会尝试解密所有的 cookie——甚至那些不是来自 Laravel 的。当你尝试访问第三方 cookie 时,Laravel 认为它应该在通过请求返回时解密它。解密的结果是无效的,所以你最终得到一个空字符串。通过将 cookie 添加到 $except 数组,您是在告诉您的 Laravel 应用程序您不希望该特定 cookie 被加密或解密。
    猜你喜欢
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2015-12-19
    • 2018-01-04
    相关资源
    最近更新 更多