【小技巧分享】在 Laravel 中设置没有加密的 cookie

教程 Summer ⋅ 于 2年前 ⋅ 最后回复由 ADKi 2周前 ⋅ 11096 阅读

问题

Laravel 框架内,因为安全的原因考虑,默认对所有 cookie 进行加密存储。

有些时候,你想设置一个 Cookie 是不加密的,例如想用来跟 JS 交互,JS 可以直接读取到明文,可是以下面的代码设置后:

Cookie::queue('cookie_for_js', 'can you read me?', 99999999);

得到的却是这个:

file

解决方案

添加到 App\Http\Middleware\EncryptCookies排除名单 中:

<?php

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 = [
        'cookie_for_js', 
    ];
}

即可。

file

去除 HTTP ONLY

对了,如果要给 JS 读取的话,要把 cookie 的 http only 属性去掉,请使用以下代码:

Cookie::queue('cookie_for_js', 'can you read me?', $minutes = 99999999, $path = null, $domain = null, $secure = false, $httpOnly = false);

file

本文章首发在 Laravel China 社区

Practice makes perfect.

本帖已被设为精华帖!
回复数量: 7
暂无评论~~
您需要登陆以后才能留下评论!

Composer 中国全量镜像

Top 100 扩展包

Lumen 中文文档

Laravel 速查表

Laravel 中文文档

Laravel 项目开发规范

Laravel 开发环境部署

社区文档撰写指南

TDD 构建 Laravel 论坛笔记

PHP PSR 标准规范

PHP 设计模式全集

Dingo API 中文文档