使用Laravel 4 cookies作为普通cookie

时间:2014-10-06 07:58:26

标签: php cookies laravel

我想像普通的cookie一样使用Laravel 4 cookies,在用户PC上存储信息。

所以基本上我想让Laravel相当于:

setcookie("TestCookie", $value, time() + 3600 * 24 * 365);
echo $_COOKIE["TestCookie"];

我用过这个,没有成功,它没有打印任何东西:

Cookie::make('TestCookie', $value, 60 * 24 * 365);
echo Cookie::get('TestCookie');

同样适用于

Cookie::queue('TestCookie', $value, 60 * 24 * 365);
echo Cookie::get('TestCookie');

或者

Cookie::forever('TestCookie', $value);
echo Cookie::get('TestCookie');

我想在我的BaseController __construct方法中执行此操作:

if (Session::has('hash') && !Cookie::has('hash'))
{
    Cookie::queue('hash', Session::get('hash'), $this->cookieLifeTime);
}
else if (Cookie::has('hash') && !Session::has('hash'))
    Session::put('hash', Cookie::get('hash'));
else if (!Session::has('hash') && !Cookie::has('hash'))
{
    $hash = str_shuffle(sha1(uniqid()));
    Session::put('hash', $hash);
    Cookie::queue('hash', Session::get('hash'), $this->cookieLifeTime);
}

谢谢:)

2 个答案:

答案 0 :(得分:4)

Cookie::make仅创建Cookie类的新实例。

创建实例后,您应该使用Response

将其返回
$cookie = Cookie::make('TestCookie', $value, 60 * 24 * 365);
return Response::view('view')->withCookie($cookie);

您也可以使用Redirect

执行相同操作
return Redirect::to('somewhere')->withCookie($cookie)

PS。请注意,该cookie仅在页面重新启动后才可用。 Cookie:queue(...)

也是如此

Cookie:queue()的主要区别在于Laravel会在当前Cookie的末尾自动附加您的Response。但是在下一次请求(页面打开)之前它仍然无法使用

更新

根据您的评论我刚刚测试了这段代码:

Cookie::queue(Cookie::make('test', 'test'));

echo (Cookie::has('test')) ? Cookie::get('test') : 'null';

工作正常。

更新2

尝试在/app/config/sessions.php中设置正确的域名 在某些情况下可能有所帮助。

答案 1 :(得分:0)

您需要更改:

Cookie::queue('TestCookie', $value, 60 * 24 * 365);
echo Cookie::get('TestCookie');

成:

if (Cookie::has('TestCookie')) {
   echo Cookie::get('TestCookie');
}
else {
    Cookie::queue('TestCookie', $value, 60 * 24 * 365);
}

如在PHP中,如果页面尚未刷新,则无法显示cookie。首先你设置cookie,当你重新加载页面时,你应该设置你的cookie,然后应用程序可以显示它的值。