简体   繁体   中英

Laravel store session in cookie

I have a website where the front page contains a search form with several fields.

When the user performs a search, I make an ajax call to a function in a controller.

Basically, when the user clicks on the submit button, I send an ajax call via post to:

Route::post('/search', 'SearchController@general');

Then, in the SearchController class, in the function general , I store the values received in a session variable which is an object:

Session::get("search")->language = Input::get("language");
Session::get("search")->category = Input::get("category");
//I'm using examples, not the real variables names

After updating the session variable, in fact, right after the code snippet shown above, I create (or override) a cookie storing the session values:

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

And after that operation, I perform the search query and send the results, etc.

All that work fine, but I'm not getting back the values in the cookie. Let me explain myself.

As soon as the front page of my website is opened, I perform an action like this:

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

}

That seems to be always failing if($search) is always returning false , and as a result, my session variable search has always its properties language and category populated with the value any . (Again: I'm using examples, not the real variables names).

So, I would like to know what is happening here and how I could achieve what I'm intending to do.

I tried to put Session::put("search", json_decode($search)); right after $search = Cookie::get('mysite_search'); removing all the if else block, and that throws an error (the ajax call returns an error) so the whole thing is failling at some point, when storing the object in the cookie or when retieving it.

Or could also be something else. I don't know. That's why I'm here. Thanks for reading such a long question.

Ok. This is what was going on.

The problem was this:

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

Before having it that way I had this:

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

But for some reason, that approach with forever wasn't creating any cookie, so I swichted to queue (this is Laravel 4.2 ). But queue needs a third parameter with the expiration time. So, what was really going on is that the cookie was being deleted after closing the browser (I also have the session.php in app/config folder set to 'lifetime' => 0 and 'expire_on_close' => true which is exactly what I want).

In simple words, I set the expiration time to forever (5 years) this way:

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

And now it seems to be working fine after testing it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM