为了更熟悉cookie,我决定建立一个简单的cookie管理系统,以便更好地控制我可以存储和检索用户的信息。
想法是设置一个cookie(如果它不存在),并更新cookie(如果它已经存在于用户身上)。
一旦设置了cookie,它也将存储在一个数据库中,该数据库将在会话开始时和上次访问时跟踪。
创建一个cookie起初效果很好。但它突然停止工作,根本不会设置任何东西。这是createSession()函数的当前代码:
function createSession() {
// check to see if cookie exists
if(isset($_COOKIE["test"])) {
// update time
$expire = time()+81400;
setcookie("test","$cookiekey",$expire,"/",false,0);
} else {
// assign unique cookie id
list($msec,$sec)=explode(" ",microtime());
$cookiekey = preg_replace("/./","",($msec+$sec));
// set time
$expire = time()+81400;
// set cookie
setcookie("test","$cookiekey",$expire,"/",false,0);
// assign the unqiue id to $_COOKIE[]
$_COOKIE["test"]=$cookiekey;
unset($cookiekey);unset($msec);unset($sec);unset($expire);
}
}
我的方法是朝着正确的方向前进还是我做错了什么?
答案 0 :(得分:3)
执行$_COOKIE["test"] = something;
不会生成“测试”Cookie。你需要再次使用setcookie。
我不知道你为什么要那样做。为什么不检查$ _COOKIE [“name”]( 制作的cookie)。
答案 1 :(得分:1)
Cookie仅在其他请求完成后才可用。因此,请勿自行修改$_COOKIE
。
此外,如果您的情况存在Cookie(即设置了$_COOKIE['test']
),则再次调用setcookie
并将$cookiekey
作为其值。但是当时没有定义$cookiekey
,因此cookie将被空字符串覆盖。我想您想要使用$_COOKIE['test']
代替:
if (isset($_COOKIE["test"])) {
// update time
$expire = time()+81400;
setcookie("test", $_COOKIE["test"], $expire, "/", false, 0);
}
答案 2 :(得分:0)
您还可以使用PHP的built in session management(示例here)为您处理所有这些Cookie,从而节省您的所有痛苦。