检查 PHP cookie 是不是存在,如果没有设置它的值
Posted
技术标签:
【中文标题】检查 PHP cookie 是不是存在,如果没有设置它的值【英文标题】:Check if a PHP cookie exists and if not set its value检查 PHP cookie 是否存在,如果没有设置它的值 【发布时间】:2012-05-31 02:27:12 【问题描述】:我正在开发一个多语言网站,所以我尝试了这种方法:
echo $_COOKIE["lg"];
if (!isset($_COOKIE["lg"]))
setcookie("lg", "ro");
echo $_COOKIE["lg"];
这个想法是,如果客户端没有lg
cookie(因此,这是他们第一次访问此站点),则为该用户设置一个 cookie lg = ro
。
一切正常,除了如果我第一次进入这个页面,第一个和第二个echo
什么都不返回。仅当我刷新页面时才设置 cookie,然后echo
都打印我期望的“ro”字符串。
如何设置此 cookie 以便在用户第一次访问/页面加载时从第二个 echo
中查看其值?应该不需要刷新页面或创建重定向。
【问题讨论】:
【参考方案1】:Cookies 仅在请求时发送,因此一旦分配就无法检索(仅在重新加载后可用)。
一旦设置了 cookie,就可以在 下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。
如果在调用此函数之前存在输出,setcookie() 将失败并返回 FALSE。如果 setcookie() 成功运行,它将返回 TRUE。这不表明用户是否接受了 cookie。
在下次加载 Cookie 应可见的页面之前,Cookie 才会可见。要测试 cookie 是否设置成功,请在 cookie 过期之前检查下一个加载页面上的 cookie。过期时间通过 expire 参数设置。调试 cookie 存在的一个好方法是简单地调用 print_r($_COOKIE);。
Source
【讨论】:
【参考方案2】:回答
你不能按php manual:
一旦设置了 cookie,就可以在下一页访问它们 使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组加载。
这是因为 cookie 在响应标头中发送到浏览器,然后浏览器必须将它们与下一个请求一起发送回来。这就是它们仅在第二个页面加载时可用的原因。
解决方法
但是您可以通过在调用setcookie()
时也设置$_COOKIE
来解决它:
if(!isset($_COOKIE['lg']))
setcookie('lg', 'ro');
$_COOKIE['lg'] = 'ro';
echo $_COOKIE['lg'];
【讨论】:
我个人建议不要设置$_COOKIE[]
值。这可以在以后欺骗用户确实拥有此 cookie 的其他一些代码。替代方案是$lg = (isset($_COOKIE['lg']) ? $_COOKIE['lg'] : 'ro'; echo $lg;
以上是关于检查 PHP cookie 是不是存在,如果没有设置它的值的主要内容,如果未能解决你的问题,请参考以下文章