Laravel 在 cookie 中存储会话

Laravel store session in cookie

我有一个网站,首页包含一个包含多个字段的搜索表单。

当用户执行搜索时,我对控制器中的函数进行 ajax 调用。

基本上,当用户点击提交按钮时,我通过 post 发送一个 ajax 调用到:

Route::post('/search', 'SearchController@general');

然后,在 SearchController class 函数 general 中,我将接收到的值存储在作为对象的会话变量中:

Session::get("search")->language = Input::get("language");
Session::get("search")->category = Input::get("category");
//I'm using examples, not the real variables names

更新会话变量后,实际上,就在上面显示的代码片段之后,我创建(或覆盖)一个存储会话值的 cookie:

Cookie::queue("mysite_search", json_encode(Session::get("search")));

在该操作之后,我执行搜索查询并发送结果等。

一切正常,但我没有取回 cookie 中的值。让我自己解释一下。

一打开我的网站首页,我就执行这样的操作:

if (!Session::has("search")) {

        //check for a cookie
        $search = Cookie::get('mysite_search');

        if($search) Session::put("search", json_decode($search));
        else {
             $search = new stdClass();
             $search->language = "any";
             $search->category = "any";
             Session::put("search", $search);
        }

}

这似乎总是失败 if($search) 总是返回 false,因此,我的会话变量 search 始终具有其属性 languagecategory 填充了值 any。 (再次声明:我使用的是示例,而不是真正的变量名称)。

所以,我想知道这里发生了什么,以及如何实现我打算做的事情。

我试图在 $search = Cookie::get('mysite_search'); 删除所有 if else 块之后立即放置 Session::put("search", json_decode($search));,这会引发错误(ajax 调用 returns错误)所以整个事情在某些时候失败了,当将对象存储在 cookie 中或检索它时。

或者也可以是别的东西。我不知道。这就是我来这里的原因。感谢您阅读这么长的问题。

好的。这就是发生的事情。

问题是这样的:

Cookie::queue("mysite_search", json_encode(Session::get("search")));

在这样之前我有这个:

Cookie::forever("mysite_search", json_encode(Session::get("search")));

但出于某种原因,使用 forever 的方法没有创建任何 cookie,所以我切换到 queue(这是 Laravel 4.2).但是 queue 需要第三个参数和过期时间。所以,真正发生的是关闭浏览器后 cookie 被删除(我也将 app/config 文件夹中的 session.php 设置为 'lifetime' => 0'expire_on_close' => true 这是正是我想要的)。

简单来说,我是这样设置过期时间为永远(5年)的:

Cookie::queue("mysite_search", json_encode(Session::get("search")), 2592000);

经过测试,现在似乎工作正常。