我需要在JS中读取由我的Laravel应用程序设置的cookie。有没有一种方法可以在Laravel中做到这一点(而不是直接通过PHP进行设置),而无需覆盖类?
我需要在JS中读取由我的Laravel应用程序设置的cookie。有没有一种方法可以在Laravel中做到这一点(而不是直接通过PHP进行设置),而无需覆盖类?
请查看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'
];
}
laravel_session
cookie,但它仍然被加密。 - HerokillerEncryptCookies
暴露了一个 disableFor
方法来修改 except
属性,但我不确定应该在哪个时刻调用该方法。 - Bower已接受的答案完全没问题。
但是,我正在编写与@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');
});
而且,这两种方法都是违反直觉的,根本没有任何意义。在我的看法中,它们都增加了隐藏代码复杂性,而这些代码通常在调试时不会被查看。