【问题标题】:Use Laravel 4 cookies as normal cookies将 Laravel 4 cookie 用作普通 cookie
【发布时间】:2014-10-06 16:52:20
【问题描述】:

我想像使用普通 cookie 一样使用 Laravel 4 cookie,在用户 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);
}

谢谢:)

【问题讨论】:

    标签: php cookies laravel


    【解决方案1】:

    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 的末尾。但是直到下一个请求(页面打开)之前它仍然不可用

    更新

    根据您的 cmets,我刚刚测试了这段代码:

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

    它工作正常。

    更新 2

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

    【讨论】:

    • @Galithiel 没有。实际上,您需要在设置 cookie 后立即获取它并没有多大意义。您可以将 cookie 的值移动到某个 $variable 并在设置 cookie 后访问。
    【解决方案2】:

    你需要改变:

    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,然后应用程序可以显示它的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2015-12-19
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多