如何在Laravel 5.2中使用cookie

时间:2016-03-22 09:01:32

标签: php laravel laravel-5.2

我在某些点击事件上设置了Cookie。然后在cookie中存储值后,我想

  1. 检查是否存在cookie
  2. 获取Cookie值
  3. 我通过参考Laravel官方文档开发了一个函数。控制台显示已设置cookie。但在那之后,我无法解决视图(Blade Template)中的两点(在上面的列表中提到)。它始终显示(Cookie::get('cookie.clients'))' null'。但浏览器控制台显示该cookie 。 如果有人知道答案,我们将不胜感激。

    这是我的代码。

    控制器

    use App\Client;
    use App\Http\Requests;
    use Illuminate\Http\Request;
    use Validator;
    use App\Http\Controllers\Controller;
    use App\Repositories\ClientRepository;
    use Illuminate\Support\Facades\Auth;
    use Illuminate\Support\Facades\Cookie;
    
    class ClientController extends Controller
    {
        public function cookieadd(Request $request, Client $client)
        {
            $clients = [];
            if (Cookie::get('cookie.clients') != null)
            {
                $clients = Cookie::get('cookie.clients');
            }
            array_push($clients, $client);
    
            Cookie::forever('cookie.clients', $clients);
    
            return redirect('/client');
        }
    }
    

    查看

    @if (Cookie::get('cookie.clients') != null)
    <p>cookie is set</p>
    @else
    <p>cookie isn't set</p>
    @endif
    

3 个答案:

答案 0 :(得分:4)

您正在创建一个Cookie对象,但您没有通过回复发送它。

您可以将其直接添加到控制器中的响应中

$cookie = Cookie::forever('cookie.clients', $clients);

return redirect('/client')->withCookie($cookie);

或者您可以对Cookie进行排队并使用AddQueuedCookiesToResponse中间件自动将其添加到响应中。

Cookie::queue(Cookie::forever('cookie.clients', $clients));

return redirect('/client');

答案 1 :(得分:2)

这是另一个观点。

如果我理解正确,您已经使用Javascript在客户端设置cookie,并且您想在服务器端提取它。

Laravel对其cookie进行加密,当您使用$request->cookies()时,您将获得解密的值,并且从客户端检索Cookie不会通过解密过程,我们会获得null秒。我想,我还没能找到合适的源代码:)

您仍然可以使用原始PHP $_COOKIE['cookie_clients']来检索客户端设置的Cookie。请注意,.已由PHP(as seen on php.net)转换为_

或者,您可以将感兴趣的Cookie的名称添加到$except中的Http/Middleware/EncryptCookies.php,这样您就可以使用更多Laravel方法$request->cookie()来提取它。

我确信在这里还有很多其他方法可以解决Laravel,希望如果你不喜欢这两种方法,这可以让你知道在哪里看。祝你好运。

答案 2 :(得分:1)

您是否尝试通过Request对象显示Cookie?

$value = $request->cookie('name');

有关详细信息,请参阅laravel doc:https://laravel.com/docs/5.2/requests#cookies