Php cookie中的Laravel存储会话

Php cookie中的Laravel存储会话,php,ajax,json,laravel-4,session-cookies,Php,Ajax,Json,Laravel 4,Session Cookies,我有一个网站,首页包含一个带有几个字段的搜索表单 当用户执行搜索时,我对控制器中的函数进行ajax调用 基本上,当用户单击submit按钮时,我会通过post发送一个ajax调用到: Route::post('/search', 'SearchController@general'); 然后,在SearchController类的函数general中,我将接收到的值存储在会话变量中,该变量是一个对象: Session::get("search")->language = Input::g

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

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

基本上,当用户单击submit按钮时,我会通过post发送一个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);
        }

}
如果($search)总是返回
false
,那么这似乎总是失败
,因此,我的会话变量
search
总是用值
any
填充它的属性
language
category
。(再次强调:我使用的是示例,而不是真正的变量名)

所以,我想知道这里发生了什么,我怎样才能实现我的目标

我试着把Session::put(“search”,json_decode($search))
紧接着
$search=Cookie::get('mysite_search')
删除所有
if-else
块,这会抛出一个错误(ajax调用返回一个错误),因此在将对象存储到cookie中或重新设置对象时,整个过程在某个点失败


或者也可能是别的什么。我不知道。这就是我来这里的原因。谢谢你阅读这么长的问题。

好的。事情就是这样

问题是:

Cookie::queue("mysite_search", json_encode(Session::get("search")));
在这样做之前,我有这样一个想法:

Cookie::forever("mysite_search", json_encode(Session::get("search")));
但出于某种原因,使用
永久
的方法没有创建任何cookie,因此我切换到
队列
(这是Laravel 4.2)。但是,
queue
需要第三个带有过期时间的参数。因此,真正发生的事情是,在关闭浏览器后,cookie被删除(我还将
app/config
文件夹中的
session.php
设置为
'life'=>0
'expire\u on\u close'=>true,这正是我想要的)

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

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

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

您使用的是会话getter函数,它用于检索会话数据,而不是设置会话数据。Laravel4使用会话::put('key','value')设置会话变量的语法。@乔,我不明白你在说什么。我正在放置会话:
session::put(“search”,json_decode($search))。稍后我将覆盖会话的一些属性,如:
session::get(“search”)->language=Input::get(“language”),它工作正常(会话变量覆盖了该特定属性)。问题是json_编码和json_解码。其他一切正常。引用:“我试图将Session::put(“search”,json_decode($search)),放在$search=Cookie::get('mysite_search')之后,删除所有if-else块,这会抛出一个错误(ajax调用返回一个错误),因此,在将对象存储到Cookie中或重新设置对象时,整个过程在某个点出现故障。”