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
始终具有其属性 language
和 category
填充了值 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);
经过测试,现在似乎工作正常。
我有一个网站,首页包含一个包含多个字段的搜索表单。
当用户执行搜索时,我对控制器中的函数进行 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
始终具有其属性 language
和 category
填充了值 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);
经过测试,现在似乎工作正常。