Laravel在cookie中存储会话

时间:2015-03-19 10:59:20

标签: php ajax json laravel-4 session-cookies

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

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

基本上,当用户点击提交按钮时,我会通过帖子发送ajax电话给:

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

然后,在SearchController类中,在函数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。 (再说一遍:我使用的是示例,而不是真正的变量名称。)

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

我试图在Session::put("search", json_decode($search));删除所有$search = Cookie::get('mysite_search');块之后立即放置if else,这会抛出错误(ajax调用会返回错误)所以整个事情都会让人感到厌烦点,在将对象存储在cookie中或在将其复制时。

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

1 个答案:

答案 0 :(得分:3)

确定。这就是发生的事情。

问题在于:

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被删除了(我session.php文件夹中的app/config设置为'lifetime' => 0'expire_on_close' => true正是我想要的。)

简单来说,我将过期时间设置为永久(5年):

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

现在它在测试后似乎工作正常。