我想像普通的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);
}
谢谢:)
答案 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,然后应用程序可以显示它的值。