我有一个网页,首页包含一个包含多个字段的搜索表单。
当用户执行搜索时,我对控制器中的函数进行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
始终具有其属性language
和category
}填充值any
。 (再说一遍:我使用的是示例,而不是真正的变量名称。)
所以,我想知道这里发生了什么以及如何实现我打算做的事情。
我试图在Session::put("search", json_decode($search));
删除所有$search = Cookie::get('mysite_search');
块之后立即放置if else
,这会抛出错误(ajax调用会返回错误)所以整个事情都会让人感到厌烦点,在将对象存储在cookie中或在将其复制时。
或者也可能是别的东西。我不知道。这就是我在这里的原因。感谢您阅读这么长的问题。
答案 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);
现在它在测试后似乎工作正常。