- 推薦閱讀
COOKIT原理
laravel 的cookie 是在頭部的,我們使用的時候,一般需要在 response() 之后只用,例如
return response('ok')->withCookie('cookie_name','cookie_value');
可是很多時候我們?nèi)绻幌朐诜祷氐臅r候設(shè)置 cookie 又改怎么辦?我并沒有找到一個最優(yōu)的方案,可是我找到了一種解決方式。如果哪位讀者有更好的辦法,希望能夠及時告知。謝謝
- 思路
我本來試圖查找設(shè)置 cookie 的原裝方法,并使用它設(shè)置 cookie 。
return response('ok')->withCookie('cookie_name','cookie_value');
追蹤源碼到 withCookie($cookie)

打印傳遞的 $cookie 參數(shù)的到結(jié)果 cookie_name
$cookie = call_user_func_array('cookie', func_get_args());
之后得到的 $cookie 是一個 cookie 對象 Symfony\Component\HttpFoundation\Cookie

由于以上結(jié)果,我不知道應(yīng)該怎么直接給 cookie 賦值
因為 laravel 的 cookie 是在頭部賦值的,所以,可以這樣賦值 header('set-Cookie cookie_name:cookie_value');,
但是這樣有個問題是, \Cookie::get('cookie_name') 獲取不到值。原因是這種方式取值,是取到的加密后的值,解密字符串 cookie_value 是沒有值的,所以得到的是空。那么我們可以不解密 cookie_name ,添加到 $except 數(shù)組,再次打印,即可看到 cookie_value 這個值

其實如果在設(shè)置 cookie 值的時候,如果可以直接加密, \Cookie::get('cookie_name') 就可以直接獲取到值
還有一種方式是直接使用全局變量 _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);
}