当前位置: 首页 > 知识库问答 >
问题:

Cookie在控制器中读取正确,但在中间件中读取不正确-Laravel

柯树
2023-03-14

我试图设置cookie来定义用户首选的语言。我通过一个指向助手控制器的链接做到了这一点:

/设置区域设置/{locale}

public function edit_locale($locale) {
    $durata= 2628000; // "forever"

    if (Cookie::has('locale')) {
        Cookie::queue(Cookie::forget('locale')); // If locale cookie is already defined, delete it
    }

    Cookie::queue("locale", $locale, $durata); // Set the cookie to either "en", "fr" or "ar"

    return redirect()->back();
}

我知道这是正确的,因为如果我这样做:

dd(Cookie::get('locale'));

它显示所选择的正确区域设置。所以下一步是使用中间件实际应用这个选择的语言环境,我把它命名为“设置语言环境”:

public function handle(Request $request, Closure $next)
{
    if (Cookie::has('locale')) {
        $locale = Cookie::get('locale'); // The cookie gotten here is all scrambled for some reason
    } else {
        // other logic for when cookie is not set (irrelevant for this question)
    }

    App::setLocale($locale);

    return $next($request);
}

但如果我执行

dd(Cookie::get('locale'));

在中间件中,它读取所有加扰的cookie。所以我的问题是为什么它会这样做,我如何从这里正确地读取cookie?

共有2个答案

华昕
2023-03-14

好的,esmaill的答案对我不起作用(得到了一个“unserialize():偏移量0处43字节的错误”错误),但它确实帮助我找到了解决问题的正确方向。

我所做的只是将区域设置添加到加密Cookies中间件的$除外属性中,然后重置cookie,现在它被正确读取了。

俞衡虑
2023-03-14

使用此选项从请求获取cookie:

\Crypt::decrypt(Cookie::get('locale'))

或者使用

\Crypt::decryptString(Cookie::get('locale'))
 类似资料:
  • 我有以下代码来读取java文件,并打印出行。我通过两种方式实现了它: 使用流: 使用循环: 我被告知这是错误的,使用缓冲读取器是错误地使用了语言的特性。有没有更好的方法,我想知道使用语言功能的正确方法。

  • 问题内容: 使用GoogleAppEngine(Go)读取文件的正确方法是什么? 在Java中,我读到了,是否有等效的功能? 问题答案: 您可以从App Engine上的文件中读取文件,也可以从计算机上运行的Go应用程序中的文件中读取文件。 注意事项: 您应该使用 相对 文件路径,而不是绝对路径。工作目录是应用程序的根文件夹(文件所在的位置)。 Go代码只能读取属于 应用程序 文件的文件,因此,如

  • 问题内容: 我现在使用的代码: 似乎工作正常,但我不确定在将ByteBuffer返回池之前是否需要ByteBuffer。我什至不确定要使用。文档中没有太多关于它的内容。 问题答案: 读取请求正文的一种更简单的方法是将其分派到一个工作线程,该工作线程可以使用。 有两种方法:使用或文档中所示的调度模式。这是使用的示例: 在基本上没有派遣你。

  • 我理解下面的代码可以正常工作。在阅读Python中的while循环文档时,他们说while表达式应该是True或False,这很有意义。 现在,函数返回字符串。那么这个while循环是如何工作的呢?

  • 好的,正如标题所示,我的问题是正确地从python中的windows-1252编码文件中读取输入,并将所述输入插入SQLAlchemy MySql表。 当前系统设置: Windows 7虚拟机,带“罗杰访问控制系统”,输出文件 Ubuntu12.04 LTS虚拟机,带有Windows系统的共享文件夹,因此我可以使用“Python 2.7.3”访问该文件。 现在来看实际问题,对于输入文件,我有一个“

  • 问题内容: 我想读取其中具有架构声明的XML文件。 这就是我想要做的,请阅读。我不在乎它是否有效,但我希望它的格式正确。 问题是读者正在尝试读取架构文件,但失败了。 我甚至不想尝试。 我曾尝试禁用验证,但仍然坚持尝试读取架构文件。 理想情况下,我想使用库存的Java 5 JDK进行此操作。 到目前为止,这是我非常简单的内容: 这是我回来的例外: 是的,这很可能是XHTML架构,但这不是“ XHTM