我想检查一下我网站的用户是否允许使用cookies。
基本上我想做以下事情:
<?php
if(cookies are enabled)
{
/* Cookies related code goes here */
/* Create PHP cookie, read cookies etc */
}
else
{
/* Do something else */
}
?>
我的想法是检查setcookie
函数是否返回true
,然后启用cookie,否则不启用。
答案 0 :(得分:4)
如上所述:它不会一直有效。
所以,基本上,你可以这样做:
<?php
setcookie('enabled', '1');
if($_COOKIE['enabled']=='1'){
echo('Cookies are enabled. ');
}else{
if($_GET['nocookies']==1){
echo('Cookies are disabled. ');
}else{
$adr = explode('/', $_SERVER['SCRIPT_NAME']);
header('Location: '.$adr[count($adr)-1].'?nocookies=1');
}
}
?>
答案 1 :(得分:1)
&#39; setcookie&#39;回报还不够。对于Firefox,即使禁用cookie,此功能也会返回true。 我认为检查它的最佳方法是在cookie中设置一个值并在下一个请求中检查该值。
答案 2 :(得分:-2)
如果您创建了一个功能
,请准确回答您的问题<?php
function cookies_are_enabled() {
setcookie('enabled', 'enabled');
return $_COOKIE['enabled'] === 'enabled';
}
?>
然后在你的代码中你有:
<?php
if (cookies_are_enabled()) {
/* Cookies related code goes here */
/* Create PHP cookie, read cookies etc */
} else {
/* Do something else */
}
?>
更新:正如评论中指出的那样。这不会直接起作用。从setcookie PHP页面(我的重点):
'设置好Cookie后,可以使用$ _COOKIE或$ HTTP_COOKIE_VARS数组在下一页加载时访问它们。注意,$ _COOKIE等超级全局变量在PHP 4.1.0中可用。 Cookie值也存在于$ _REQUEST。'
中
鉴于你不能信任setcookie,我能想到的最好就是强制重定向。
<?php
function cookies_are_enabled() {
// if first page load
// set cookie and redirect
// if redirected check the cookie
if (isset($_GET['cookie_check'])) {
return $_COOKIE['enabled'] === 'enabled';
} else {
setcookie('enabled', 'enabled');
if (empty($_SERVER['QUERY_STRING'])) {
$url = $_SERVER['PHP_SELF'].'?cookie_check=1';
} else {
$url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&cookie_check=1';
}
exit(header("Location: $url"));
}
}
if (cookies_are_enabled()) {
/* Cookies related code goes here */
/* Create PHP cookie, read cookies etc */
$message = 'cookies are enabled';
} else {
/* Do something else */
$message = 'cookies are <strong>not</strong> enabled';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cookies!</title>
</head>
<body>
<p><?php echo $message; ?></p>
</body>
</html>