【问题标题】:Laravel store session in cookiecookie 中的 Laravel 存储会话
【发布时间】: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 的属性languagecategory 总是填充值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


【解决方案1】:

好的。这就是发生的事情。

问题是这样的:

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);

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

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 2014-11-05
    • 2016-03-24
    • 1970-01-01
    • 2019-05-02
    • 2023-03-25
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多