我写了一个函数,检查是否设置了cookie,如果没有设置,则设置cookie。
由于cookie无法立即使用,我需要刷新一次页面,因此我可以访问该值。
但是,当我调用该函数时,它只是不断重新加载页面。在函数外部时,它可以正常工作。只有当它在一个函数内部并且我调用它时才会发生。
function getCookie (){
if(isset($_COOKIE['ID'])){
$cookieID = $_COOKIE['ID'];
}
else{
//generate random value for cookie id
$charid = strtoupper(md5(uniqid(rand(), true)));
$uuid = substr($charid, 0, 8)
.substr($charid,20,12);
setcookie( "ID", $uuid, strtotime( '+7 days' ) );
$cookieID = $_COOKIE['ID'];
echo "<META HTTP-EQUIV='Refresh' CONTENT='0'> ";
}
echo $cookieID;
}
答案 0 :(得分:2)
这是一个有用的php页面......
<?php
function getCookie (){
if(isset($_COOKIE['ID'])){
$cookieID = $_COOKIE['ID'];
}
else{
//generate random value for cookie id
$charid = strtoupper(md5(uniqid(rand(), true)));
$uuid = substr($charid, 0, 8)
.substr($charid,20,12);
setcookie( "ID", $uuid, strtotime( '+7 days' ) );
$cookieID = $_COOKIE['ID'];
//just assign the cookie the value as if it was in the header.
//no refresh needed.
$_COOKIE['ID'] = $uuid;
}
}
?>
<html>
<body>
<?php
getCookie();
echo $_COOKIE['ID'];
?>
</body>
</html>
答案 1 :(得分:0)
检查isset
返回的内容。从您的描述看来,在首次执行此代码后,根本没有设置cookie。在FireFox中如果使用firebug
工具设置cookie,您可以选择。
一个好主意是比较if
的任何if(isset($some_var) === true){
代替if(isset($some_Var)){
的数据类型。请记住:
$v = 0;
if($v == 0){ }
返回true
if($v === 0){ }
返回true
if($v == false){ }
返回true
if($v === false){ }
返回false