【发布时间】:2015-05-22 11:03:01
【问题描述】:
我有一个网站,其首页包含一个包含多个字段的搜索表单。
当用户执行搜索时,我对控制器中的函数进行 ajax 调用。
基本上,当用户点击提交按钮时,我会通过 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
在更新会话变量之后,实际上,在上面显示的代码 sn-p 之后,我创建(或覆盖)了一个存储会话值的 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 的属性language 和category 总是填充值any。 (再次重申:我使用的是示例,而不是真正的变量名称)。
所以,我想知道这里发生了什么,以及如何实现我的目标。
我试图将Session::put("search", json_decode($search)); 放在$search = Cookie::get('mysite_search'); 之后删除所有if else 块,这会引发错误(ajax 调用返回错误)所以在存储对象时,整个事情在某些时候失败了在 cookie 中或检索它时。
或者也可以是别的东西。我不知道。这就是我在这里的原因。感谢您阅读这么长的问题。
【问题讨论】:
-
您正在使用会话 getter 函数,这是用于检索会话数据,而不是设置它。 Laravel 4 使用
Session::put('key', 'value');语法来设置会话变量。 -
@Joe 我不明白你在说什么。我正在召开会议:
Session::put("search", json_decode($search));。稍后我将覆盖会话的一些属性,例如:Session::get("search")->language = Input::get("language");,它工作得很好(会话变量获取特定的属性被覆盖)。问题是 json_encode 和 json_decode。其他一切正常。 -
引用:“我试图把 Session::put("search", json_decode($search)); 放在 $search = Cookie::get('mysite_search'); 之后删除所有 if else 块,并引发错误(ajax 调用返回错误),因此在将对象存储在 cookie 中或检索它时,整个事情在某些时候失败了。”
标签: php ajax json laravel-4 session-cookies