美文网首页
laravel 中,在不做 return 返回的情况下,coo

laravel 中,在不做 return 返回的情况下,coo

作者: 云龙789 | 来源:发表于2018-10-19 22:48 被阅读10次

    laravel 的cookie 是在头部的,我们使用的时候,一般需要在 response() 之后只用,例如 return response('ok')->withCookie('cookie_name','cookie_value');
    可是很多时候我们如果不想在返回的时候设置 cookie 又改怎么办?我并没有找到一个最优的方案,可是我找到了一种解决方式。如果哪位读者有更好的办法,希望能够及时告知。谢谢

    • 思路
      我本来试图查找设置 cookie 的原装方法,并使用它设置 cookie 。
        return response('ok')->withCookie('cookie_name','cookie_value');
    追踪源码到 withCookie($cookie)
    
    withCookie()

    打印传递的 $cookie 参数的到结果 cookie_name
    $cookie = call_user_func_array('cookie', func_get_args());
    之后得到的 $cookie 是一个 cookie 对象 Symfony\Component\HttpFoundation\Cookie

    图片.png
    由于以上结果,我不知道应该怎么直接给 cookie 赋值

    因为 laravel 的 cookie 是在头部赋值的,所以,可以这样赋值 header('set-Cookie cookie_name:cookie_value');,
    但是这样有个问题是, \Cookie::get('cookie_name') 获取不到值。原因是这种方式取值,是取到的加密后的值,解密字符串 cookie_value 是没有值的,所以得到的是空。那么我们可以不解密 cookie_name ,添加到 $except 数组,再次打印,即可看到 cookie_value 这个值

    图片.png

    其实如果在设置 cookie 值的时候,如果可以直接加密, \Cookie::get('cookie_name') 就可以直接获取到值

    还有一种方式是直接使用全局变量 _COOKIE 也是可以直接取到原值的_COOKIE['cookie_name']

    还有一种方式是 \Cookie::queue(name,value,time);
    这种方式可以 \Cookie::get(name) 直接取值

            /** 意思是在下一个 response 返回的时候,带上这个 cookie
             * Queue a cookie to send with the next response.
             *
             * @param array $parameters
             * @return void 
             * @static 
             */ 
            public static function queue($parameters = null)
            {
                \Illuminate\Cookie\CookieJar:: ($parameters);
            }
            
    

    相关文章

      网友评论

          本文标题:laravel 中,在不做 return 返回的情况下,coo

          本文链接:https://www.haomeiwen.com/subject/epxpzftx.html