Laravel 中未加密的 cookie

问题描述 投票:0回答:3

我需要读取我的 Laravel 应用程序在 JS 中设置的 cookie。有没有办法在 Laravel 中做到这一点(而不是直接通过 PHP 设置)而不覆盖类?

laravel laravel-5 laravel-5.1
3个回答
63
投票

参见

EncryptCookies
中间件 - 这允许您设置例外情况;即不加密的cookie。

namespace App\Http\Middleware;

use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;

class EncryptCookies extends BaseEncrypter
{
    /**
     * The names of the cookies that should not be encrypted.
     *
     * @var array
     */
    protected $except = [
        'my_cookie'
    ];
}

2
投票

接受的答案完全没问题。

但是我正在写@Bower 评论中指出的同一件事的其他方式。由于这是一个冗长的方法,我没有发表评论,而是写了一个完整的答案。

要使用

disableFor
方法执行相同的操作,您可以遵循以下任何方法。

  • 您在服务容器中注册
    EncryptCookies
    。并在实例化后调用
    disableFor

// use App\Http\Middleware\EncryptCookies;
// use Illuminate\Contracts\Encryption\Encrypter;

$this->app->bind(EncryptCookies::class, function ($app) {
    return tap(new EncryptCookies($app->make(Encrypter::class)), function ($middleware) {
        $middleware->disableFor('laravel_session');
    });
});
  • 您可以使用服务容器的
    afterResolving
    事件。
$this->app->afterResolving(EncryptCookies::class, function ($middleware) {
    $middleware->disableFor('laravel_session');
});

而且,这两种方法都是违反直觉的并且根本没有意义。恕我直言,它们都增加了隐藏调试时通常不查看的代码的复杂性。


0
投票

在较新的 Laravel 版本中,这甚至更简单。

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        EncryptCookies::except('my_cookie');
    }
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.