Laravel 8 中如何检查Cookie是否存在?
你现有代码的核心错误源于对Laravel Cookie::has() 方法的返回值理解有误:
$user_id = Cookie::has('u_id'); // 此处返回布尔值 true/false,不是u_id的实际存储值 if($user_id === 1) // 布尔值与数值1做全等判断永远为假,所以逻辑始终不生效
1. 仅判断Cookie是否存在的正确写法
如果只需要确认u_id这个Cookie是否被设置,直接用Cookie::has()的返回值做布尔判断即可:
public function add_to_fav($product_id){ if(Cookie::has('u_id')){ // Cookie存在的业务逻辑,注意原代码的$is_already_added需要提前赋值才能返回 return $is_already_added; } else{ return "Login First"; } }
2. 需同时判断Cookie存在且值等于1的写法
如果你的业务逻辑是要求u_id存在且对应值为1,要先判断存在再调用Cookie::get()取实际值校验:
public function add_to_fav($product_id){ if(Cookie::has('u_id') && Cookie::get('u_id') == 1){ return $is_already_added; } else{ return "Login First"; } }
常见注意事项
- Laravel默认所有通过框架设置的Cookie都会加密,如果你这个
u_id是前端JS设置的未加密Cookie,需要在app/Http/Middleware/EncryptCookies.php的$except数组里排除u_id,否则Cookie::has()会识别失败:// app/Http/Middleware/EncryptCookies.php protected $except = [ 'u_id', // 其他不需要加密的Cookie名 ]; - 原代码里返回的
"$is_already_added"不需要加双引号包裹,直接返回变量本身即可,避免不必要的字符串解析开销。
内容的提问来源于stack exchange,提问作者Pooja
相关产品推荐
相关产品推荐

