【问题标题】:How to set and get Cookie in laravel如何在 laravel 中设置和获取 Cookie
【发布时间】:2017-12-25 17:23:01
【问题描述】:

我想在 cookie 中设置和获取值,但它不起作用:

    Cookie::queue('online_payment_id', "1", 15);

    $value = Cookie::get('online_payment_id');
    dd($value);

dd() 返回null;


我使用了以下方式,但收到了这条消息:

Method cookie does not exist.

    request()->cookie('online_payment_id');

    $value = response()->cookie('online_payment_id', "1", 15);
    dd($value);

【问题讨论】:

标签: php laravel cookies laravel-5.3


【解决方案1】:

设置 Cookies

 public function setCookie(Request $request){
      $minutes = 60;
      $response = new Response('Set Cookie');
      $response->withCookie(cookie('name', 'MyValue', $minutes));
      return $response;
   }

获取 Cookie

   public function getCookie(Request $request){
      $value = $request->cookie('name');
      echo $value;
   }

【讨论】:

  • 我收到了这条消息:Call to undefined method Illuminate\Support\Facades\Response::withCookie()
  • 是否可以在重定向中设置cookie?
  • 尝试使用-> Redirect::to('url')->withCookie($cookiedata);对于 Laravel 4,redirect('url')->withCookie($cookiedata);让 Laravel 5 使用重定向设置 cookie
  • 对于使用 dump() 的人,请务必阅读下面 Erin Geyer 的回答
  • 如果您的 laravel 不是旧版本,则答案不正确
【解决方案2】:

与 laravel 中的其他所有内容一样,设置/获取 cookie 的方法有很多。 cookie 将自动添加到传出响应中。

    $value = 1;
    $minutes = 15;
    Cookie::queue($online_payment_id, $value, $minutes);

为了获取cookie,您可以使用

    request()->cookie($online_payment_id);

【讨论】:

  • so 而不是使用 Request;尝试使用 Illuminate\Http\Request;
  • 它返回null Cookie::queue("test", 1, 1); $value = request()->cookie('test'); dd($value);
  • 将cookie的时间设置为1000再试一次
  • 时间不是问题,返回null。
  • ``` $value = 1; $分钟 = 15; $online_payment_id = 'ss'; Cookie::queue($online_payment_id, $value, $minutes); dd(request()->cookie($online_payment_id)); ``` 例如,这将打印 null
【解决方案3】:

在 laravel 中有几种设置和获取 cookie 的方法。

官方文档说Cookies

我通常是这样结束的

$response = new \Illuminate\Http\Response(view('welcome'));
$response->withCookie(cookie('test_cookie', $request->test_cookie, 45000));
return $response;

你也可以使用CookieJar

参考CookieJar

【讨论】:

  • Laravel 8:为我工作。
  • 我以这种方式获取 cookie,但它的值已加密(或其他)得到一个很长的字符串
【解决方案4】:

在文件顶部添加use Symfony\Component\HttpFoundation\Cookie;或简单地use Cookie;

生成 Cookie 实例

    $cookie = cookie('name', 'value', $minutes);
    return response('Hello World')->cookie($cookie);

从请求中检索 Cookie,您可以使用请求确保在您的方法中使用 Request $request。

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

【讨论】:

    【解决方案5】:

    试试这个:

    public function setCookie(Request $request){
    
     $cookie_name = "user";
     $cookie_value = "value";
     setcookie($cookie_name,$cookie_value, time() + (86400 * 30), "/"); //name,value,time,url
    
     dd($_COOKIE['user']);
    
    }
    

    【讨论】:

      【解决方案6】:

      即使您仔细遵循有关如何设置 cookie 的 Laravel 文档,您也可能会因为无法设置 cookie 而最终发疯数小时(就像我今天所做的那样)!

      我终于发现了为什么我的 cookie 没有被设置……我还在测试代码时使用了dump() 函数来显示数据。 dump() 函数将输出发送到浏览器,这需要发送标头。 Cookie 也必须与标头一起发送,因此如果您使用 dump(),您的 Cookie 将永远不会被发送!

      我希望这可以帮助其他很可能遇到这种情况的人。

      【讨论】:

        【解决方案7】:

        显示所有 cookie

        request()->cookie();
        

        获取特定项目

        request()->cookie('itm_name');
        

        设置项目

        request()->cookie('item_name', 'item_value', Min_how_long_it_will_alive);
        

        【讨论】:

          【解决方案8】:
          public function setCookie(Request $request) {
          
              Cookie::queue('name', $request->test, 10);
          
              return view('home');
           }
          

          这里Cookie::queue($cookie_name, $data, $life_time_of_this_cookie);

          只需在您要显示数据的地方打印 cookie。

           {{ Cookie::get('name') }}
          

          您可以从这里阅读 Laravel Cookie Example | Set and Get Cookie in Laravel

          【讨论】:

            【解决方案9】:

            laravel 8.x

            删除 cookie:

            如果您还没有传出响应的实例,您可以 使用 Cookie 门面的 queue 方法使 cookie 过期:

            use Illuminate\Support\Facades\Cookie;
            Cookie::queue(Cookie::forget('name'));
            

            设置:

            如果您想确保 cookie 与传出 响应,但您还没有该响应的实例,您可以 使用 Cookie 门面将 cookie “排队”以附加到 发送时的响应。 queue 方法接受参数 需要创建一个 cookie 实例。这些 cookie 将附加到 发送到浏览器之前的传出响应:

            use Illuminate\Support\Facades\Cookie;
            
            Cookie::queue('name', 'value', $minutes);
            

            【讨论】:

              【解决方案10】:

              只需初始化即可

              设置 Cookie
              setcookie('name','value', time)

              删除 Cookie
              Cookie::forget('name')

              【讨论】:

                猜你喜欢
                • 2020-05-14
                • 2018-12-21
                • 1970-01-01
                • 2017-02-04
                • 2018-09-21
                • 2018-04-01
                • 1970-01-01
                • 2011-09-05
                • 1970-01-01
                相关资源
                最近更新 更多